2011-09-13 75 views
1

我試圖分析我們的Windows Phone 7應用程序的內存使用情況。在浸泡測試之後,查詢ApplicationPeakMemoryUsage屬性會產生〜90Mb的值。 System.GC.GetTotalMemory(true)此時返回〜11Mb,所以平衡必須是非託管內存。該應用程序不明確分配任何非託管內存,所以我假設餘額是GPU資產,音頻和應用程序二進制本身。內存分析工具和方法

通過環繞對ContentManager.Load()和GPU資源分配的調用(new RenderTarget2D()等)。類似於

System.GC.Collect(); 
unused = System.GC.GetTotalMemory(true); 
GC.WaitForPendingFinalizers(); 
long mem = ((long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage")); 
. 
. // perform loads/allocations 
. 
mem = ((long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage")) - mem; 

代碼我能夠獲得在我的應用程序使用的渲染緩衝,紋理/音頻資源等等,這些總〜45-50Mb內存大概數字。 ApplicationCurrentMemoryUsage在初始化開始時立即產生10Mb。減去11Mb託管堆(這是部分重複計算!),這留下了大約20Mb的數據。

芒果內存分析器跟蹤總計,但只分解託管堆的分配。除了GPU資源,音頻和應用程序二進制本身之外,還可能使用大量非託管內存?跟我在做什麼有什麼更合理的跟蹤記憶的工具或方法?

回答

0

您使用WebBrowser控件嗎?

它有一些缺陷,在某些情況下造成巨大的(和增量)內存泄漏,特別是如果頁面包含許多媒體或複雜的腳本,或在其頁面重新加載/改變與不幸的時機..