我正在支持WM6平臺上的「舊」移動應用程序。我們最近不得不升級到新設備,因爲舊設備不再可用。這也意味着從WM6.1升級到WM6.5,以及從.NET CF 2.0升級到3.5。Windows Mobile:如何識別和阻止共享DLL佔用地址空間?
這個應用程序的主要問題是持續的內存壓力(OutOfMemoryExceptions)。我曾嘗試修復內存泄漏,並優化了某些內存消耗代碼。但是,在新設備上,整個情況比老年人差得多。我知道每個進程都有32MB的虛擬內存限制,不管有多少物理內存可用(interesting read)。
我用VirtualMemory.exe和摩托羅拉eMScript來可視化/分析我的應用程序的32MB內存插槽。這是進程虛擬內存的樣子(總共32MB,每個灰色條代表1MB,頂部是新設備,底部是舊設備)。紅色條右側的所有內容都是第三方DLL(OS,Vendor,...)。通過切換到新設備,我們又損失了3MB。
看來,應用正在遭受「DLL緊縮」的問題,一些第三方的DLL佔據了右邊(最高地址)的虛擬內存地址。注意:左邊的藍色條被.exe佔據,我可以使用this awesome trick來消除它。
所以這裏是我的問題:我如何確定哪些DLL佔用了我的地址空間?我嘗試了eMScript,它給出了所有DLL和地址列表,但不是紅色欄右側的那些(共享DLL)。 是否有任何一般的建議或提示如何減少這種數量的地址空間丟失?有人推薦使用「減少圖形驅動程序」,但我不相信這將解決正確的問題。
新設備是摩托羅拉MC65,以防萬一。
OK,我發現DevHealth '在網絡上的某個地方' ......不過,我不能」找到查看器,並且在沒有它的情況下解釋巨大的ASCII文件是不可能的。我讀過它包含在Windows Mobile Adaptation Kit中,但您需要與Microsoft達成OEM協議。 – DavWEB
請嘗試hxxp://en.pudn.com/dl.asp?id = 2329891 – josef