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 下落不明。

Mango 内存分析器跟踪总数,但只分解托管堆的分配。除了 GPU 资源、音频和应用程序二进制文件本身之外,还有什么可能会使用大量非托管内存?有没有比我现在做的更明智的跟踪记忆的工具或方法?

4

2 回答 2

1

下载的文件(包括来自网络的图像)可能会占用大量内存。如果您正在使用它们,请确保再次正确释放内存(请参阅http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7 .aspx)。

于 2011-09-13T15:57:28.653 回答
0

您使用的是 WebBrowser 控件吗?

它有一些缺陷,在某些情况下可能会导致巨大的(和增量的)内存泄漏,特别是如果页面包含许多媒体或复杂的脚本,或者当它的页面以不幸的时机重新加载/更改时。

于 2012-07-08T19:53:59.800 回答