我试图分析我们的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资源,音频和应用程序二进制本身之外,还可能使用大量非托管内存?跟我在做什么有什么更合理的跟踪记忆的工具或方法?
不使用下载的文件... – moonshadow