2011-09-13 49 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控件吗?

它有一些缺陷,在某些情况下造成巨大的(和增量)内存泄漏,特别是如果页面包含许多媒体或复杂的脚本,或在其页面重新加载/改变与不幸的时机..