優化Windows CE程式

2021-04-13 05:35:47 字數 1482 閱讀 7106

在有限的ram和有限的顯示空間程式設計的要特殊考慮的事

windows ce是徹底為小平台設計的乙個新的windows 版本 。儘管它只支援win32 api的子集而犧牲了向後相容性,但windows ce通過將乙個小版本的windows擴充套件到英特爾x86系列以外的處理器而開拓了新領域。在這一捲中,我們將討論一些技術優化windows ce程式以減少它的記憶體占用。我們將討論 命令欄,windows ce的乙個新的獨特的結合了工具欄和選單元素的控制項。

windows ce程式設計最重要的方面是需要管理乙個程式可用的有限的記憶體。其它的windows程式設計可以假定幾乎無限的記憶體空間。即使一台pc機只有4mb 或8mb的ram,windows也可以用乙個交換檔案在硬碟上建立大量虛擬記憶體。但windows ce裝置只有2mb的ram,且有一半用於檔案儲存。windows ce應用程式必須盡可能減少所占用的記憶體空間以便在這樣少的記憶體環境中生存。在設計程式時,你應該知道分配給windows ce的不同型別的記憶體和如何最大限度地利用它們。

記憶體分配函式的核心集處理虛擬記憶體。儘管windows ce不維護磁碟上的乙個頁面檔案,它還是有乙個支援基於頁面的虛擬記憶體的記憶體保護方案。虛擬記憶體函式是分配有效記憶體給乙個程式的最基本方法。當乙個程式需要大塊記憶體時應使用它們。windows ce在記憶體少時限制單一虛擬記憶體的大小。超過64k的分配——或者有時甚至只有16k都會失敗即使系統需要更多有效的記憶體空間。這樣來防止任一程式占用所有有效的ram。

堆是分配小的記憶體單元,即從一百到幾千位元組,最合適的地方。不同於windows 3.x有64k的限制,windows ce不限制堆的大小。當給定分配後作業系統擴充套件堆。當堆的內容釋放,系統將盡可能的縮小堆的整個大小。但windows ce不支援堆內可重定位的記憶體塊。這意味著一定時間後堆可能變成碎片——更明白的說就是,一些小塊被分配到許多頁面,以致記憶體不能從系統釋放。

解決碎片問題的乙個方法是用heapcreate分配乙個單獨的堆物件。然後你就可以在它內部分配和釋放小塊記憶體。儘管堆物件和堆本身一樣同樣有碎片問題,但當它的記憶體不再需要時,堆物件可以完全釋放。由於堆物件需要一些經常的開銷,應該避免在少於5k時建立堆。 

不同於每天關閉或乙個星期關一次的pc機。手持 pc機從來不真正關閉,它們只是在某處掛起。這意味著乙個程式一次可以執行幾個月。程式設計人員必須特別關注去了解讓乙個程式執行很長時間的問題。由於系統很少重新引導,記憶體漏失逐漸積聚並會嚴重影響效能。

當然,分配記憶體最簡單的地方是在堆疊,它不會產生碎片。當資料壓入堆疊。系統用虛擬記憶體分配自動增長堆疊。能夠分配給任意函式的堆疊記憶體有限——只剛剛超過50k。但除了一些極端的情形,這並不是乙個問題。

虛擬記憶體分配不僅在記憶體少的情況下失敗,它們在系統企圖增長堆疊時也會失敗。當系統不能增長乙個堆疊,它暫停屬於堆疊的執行緒直到記憶體釋放。當你設計乙個執行在記憶體很少的環境下的程式時理解這一點十分重要。

當記憶體太少,系統將要求使用者關閉乙個程式。乙個wm_close訊息就會傳送給使用者選擇終止的程式視窗。如果程式將大量資料壓入堆疊並且系統不能增長堆疊,程式將掛起。如果程式在8秒內沒有關閉,系統將強制終止它的執行緒並把它從記憶體清除,這可能導致大量資料丟失。

windowsCE驅動程式問題集錦

如何讓系統載入自己寫的驅動程式?兩種辦法 1 在 hkey local machine drivers builtin 下新增註冊鍵。2 在應用程式中呼叫activatedeviceex。在一些檔案中用分號來表示注釋,例如下面的內容 在 cesysgen.前加了 有沒有什麼特別的含義?在wince的...

如何診斷Windows CE的應用程式崩潰

無論你是乙個單純的電腦使用者還是一名高階軟體工程師,都一定對程式崩潰不陌生。做為一名windows ce應用程式開發者,你也一定遇到過下圖這種場景 這個對話方塊告訴你,有乙個叫installer.exe的程式在位址00019320處崩潰了。如果這個程式歸你負責,那麼你的問題就來了 怎麼找出這個bug...

Windows CE中實現藍芽串列埠驅動程式

摘要 藍芽通訊平台在嵌入式系統的實現過程中,obex 物件交換 始終是很重要的一部分,基於 obex 的藍芽檔案傳輸得到廣泛應用。而 obex 的實現是基於藍芽 介面,所以藍芽串列埠驅動程式的實現就有了很重要的意義。介紹了 windows ce 下串列埠驅動程式的結構和一種具體的實現方法。obex ...