ace的一些問題和難點
對ace仰慕已久,終於有機會使用ace開發系統。對ace的仰慕與追求女孩是一樣的,理想化的、美好的。實際用上才發現,ace如女人一樣難以琢磨,有太深奧的學問。搞不清楚,會讓你身心疲憊。
總結來說,ace有如下好處:
1. 跨平台
2. 中間業務
3. 系統抽象
4. 網路傳輸
5. 新的模式
6. 。。。
ace的惡名:
1. 記憶體洩露
2. 系統龐大
3. 體系繁雜
4. 概念難以理解
實際使用中發現的問題:
1. 非同步的proactor在linux下不能正常工作
2. 和mfc結合有問題
3. 遞迴執行緒鎖linux下有問題
現在簡單說一說,經過使用,ace的優點乙個都不少,都可以體驗到。比如我們現在在windows下開發程式,與系統、語言有關的函式、呼叫、資源全部使用ace。在vs.net下編譯除錯,要知道vc的除錯工具要比linux下的方便友好多了。結果是,要移植到linux下時,只需要在linux下寫好makefile,把windows下除錯通過的程式包含進來,就完全可以執行,也省去了除錯的麻煩。
其它也全是,再比如說非同步傳輸模式,在windows下是使用完成埠,在linux下是其它的東西。一般是aio。如果自己寫完成埠的傳輸層框架,要做的除錯工作是相當麻煩的。在ace下,使用proactor即可,框架已經經過驗證了。
再說說ace的惡名。
1.記憶體洩露是指在windows下的洩露,實際使用中發現,洩露並不是ace洩露的,是vc洩露的,即使不使用ace,建立乙個空的工程,vc也會有一定數量的記憶體洩露,大小是固定的,體積是很小的。所以,這是ace替vc的惡名。
2.系統龐大,這是當然的了,複雜的東西當然龐大了,龐大後,功能也強大了。windows也比dos大多了嗎。但是,實際使用中,我們只會使用到其中很小一部分,所以可以選擇性地學習,連線檔案時,連線程式也會提取用到的符號,最後的程式體積也不會很大。
3.繁雜。因為ace要處理各種異構平台,當然做了很多事。另外,還有人說ace效率可能不行,因為太繁雜。其它,ace中對不同平台的相容是使用模板、預定義實現的,編譯連線後,體積是很小的。最終**不大。當然,ace不太適合用在嵌入式系統上,因為使用到了很多模式,函式呼叫過多,這種開銷在嵌入式系統上是不允許的。
4.概念難以理解,這就是各人水平了。其實ace中用到的各種技術和模式,都是大家多多少少用到的,只是沒有這麼大面積地地使用。
再說說幾個實際問題。
1.因為linux對posix支援的不完整,所以,非同步的proactor在linux和很多unix下工作不正常,這個問題只需要安裝乙個posix-aio做乙個適配和偽裝即可以。將來linux核心完全支援posix後,重新編譯安裝乙個新核心即可真正支援非同步傳輸。
如果只裝乙個posix-aio還不能正常工作,在這個基礎上再裝乙個tproactor,一定可以解決問題。
2.和mfc結合問題:在windows下安裝perl環境,然後重啟。然後執行下面命令
cd %ace_root%
perl bin/mwc.pl -type vc8 -value_template "configurations = 'mfc release' 'mfc debug' release debug" ace/ace.mwc
然後開啟%ace_root%/ace/ace.sln,編譯mfc兩個工程,生成acemfc.lib及dll就可以了,然後使用時,先呼叫:ace::init(),使用完了呼叫 ace::fini()。
就這麼簡單,一定可以用的。多試試。
3.這個還沒有大面積遇到,以後再說。
ace是「會者不難,難者不會」。
好東西啊!一般人我不告訴他!
String 一些問題
前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...
C 一些問題
1 if else語句和switch case語句的效率分析對比 switch效率高。switch的效率與分支數無關,當只有分支比較少的時候,if效率比switch高,因為switch有跳轉表。分支比較多,那當然是switch 根據大量的實際程式測試 不考慮不同的編譯器優化程度差異,假設都是最好的優...
mysql 一些問題
1 中文亂碼 問題 推薦用 uft 8 編碼 適配一切介面,mysql中 發生中文亂碼時 開啟mysql 安裝路徑 更改後 重啟mysql 服務即可,有時也需要 重新匯入資料庫 可能是與 source 檔案時 編碼沒有設定好 client password your password port 33...