twe*_*ypi 7 c# memory xna windows-phone-7 xna-4.0
我在WP7项目上运行了一个C#XNA,我发现它在屏幕更改之间占用了内存而没有返回它,最终导致了一个outofmemoryexception.
我看了看,但我不能为我的生活找到这个记忆的去向.
有什么方法可以找出内存的使用位置以及为什么不将其返回给设备?
谢谢你的帮助!
在项目的Windows版本上使用Microsoft的CLR Profiler for .NET Framework 4(免费).
使用此功能,您可以获得项目内存分配的时间表.或者您可以检查堆本身.它为您提供按类型分配的所有内容的列表.您可能会看到过分分配的对象,从那里您可以为该类型或该时间范围调出分配图.这将显示分配这些对象的功能.
这是一篇随机的博客文章,其中包含一些CLR Profiler的截图和讨论.(不完全是你将用它做什么,但如果你之前从未使用过CLR Profiler,这是一个有用的介绍.)
但是:因为您正在使用XNA,并且您通常必须非常努力地使C#耗尽托管内存,否则您可能会耗尽非托管内存.Dispose()在您停止使用您创建的图形或声音对象之前,是否有某个地方没有打电话?我已经讨论了这个细节一对夫妇 的时代.
所以请注意,如果你在CLR Profiler中出现了很多非常小的对象 - 实际上它们可能会耗尽大量的非托管内存.