Windows Mobile裝置跟案頭PC比起來,資源是相當受限的。目前最新的裝置一般也就128M RAM+256M Flash,再外擴4G的儲存卡。但Windows Mobile裝置的資源與RAM和Flash是用Byte來計算的8bit單片機來說,還是相當可觀的,編程的時候也不用像以前那樣摳門到以Byte來計算全域變數。雖然是如此,但是程式和OS都是在RAM中啟動並執行,最鬱悶的是,由於RAM不夠大,以至於跑一些軟體時,不得不關掉正在啟動並執行程式,為其騰出一些空間來,這樣捉襟見肘的日子在以前還是經常碰到的。
大家知道,在Windows Mobile裝置上,我們可以通過settings->system->memory來查看當前裝置資源的使用狀態,但是這個就需要動那麼幾下手,點擊螢幕,麻煩。我們一般喜歡偷懶,讓這些資訊即時顯示在今日介面上該多好啊,於是,好多公司的軟體中都將裝置資源的使用狀態即時顯示在介面上,比如Spb的,比如Resco的,很多很多。
其實,在WM6.0 SDK內建的Sample中,就有相關的程式,它位於” \PocketPC\CPP\win32\MemWatcher”檔案夾下。這個工程是用native code寫的一個今日介面的外掛程式,編譯完以後,產生一個dll檔案和cab安裝檔案,我們可以直接將cab檔案安裝到裝置上,然後在今日介面的設定中,將它顯示。如1所示:
圖1:MemWatcher的今日外掛程式
當然,我們也可以通過platform invoke將coredll中的GetDiskFreeSpaceEx引入進來,通過得到的Total Free Bytes和Total Bytes計算當前的資源使用方式。2所示:左邊是程式的運行效果,右邊是settings->system->memory的資訊,通過比較可以發現,他們顯示的資源資訊是一致的。
圖2:計算Memory使用的程式
附上今日外掛程式的那個MemWatcher安裝包:memwatchercab.CAB.rar,下載後,直接將檔案命改為memwatchercab.CAB,然後在裝置上安裝即可。以及顯示資來源程式的源檔案:GetStorageCard.zip
參考文章:Display Device memory information with P/Invoke