加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C#中找到内存耗尽的位置?

发布时间:2020-12-15 17:14:10 所属栏目:百科 来源:网络整理
导读:我在WP7项目运行时有一个C#XNA,我发现它在屏幕更改之间占用了内存而没有返回它,最终导致了一个outofmemoryexception. 我看了看,但我不能为我的生活找到这个记忆的去向. 有什么方法可以找出内存的使用位置以及为什么不将其返回给设备? 谢谢你的帮助! 解决方
我在WP7项目运行时有一个C#XNA,我发现它在屏幕更改之间占用了内存而没有返回它,最终导致了一个outofmemoryexception.

我看了看,但我不能为我的生活找到这个记忆的去向.

有什么方法可以找出内存的使用位置以及为什么不将其返回给设备?

谢谢你的帮助!

解决方法

在项目的 Windows版本上使用Microsoft的 CLR Profiler for .NET Framework 4(免费).

使用此功能,您可以获得项目内存分配的时间表.或者您可以检查堆本身.它为您提供按类型分配的所有内容的列表.您可能会看到过多分配的对象,从那里您可以为该类型或该时间范围调出分配图.这将显示分配这些对象的功能.

这是一个random blog entry,其中包含一些CLR Profiler的截图和讨论. (不完全是你将用它做什么,但如果你之前从未使用过CLR Profiler,那么这是一个有用的介绍.)

但是:因为您正在使用XNA,并且您通常必须非常努力地使C#耗尽托管内存,否则您可能会耗尽非托管内存.在您停止使用您创建的图形或声音对象之前,是否有某些地方没有调用Dispose()?我已经讨论了a couple of times的细节.

所以请注意,如果你在CLR Profiler中出现了很多非常小的对象 – 实际上它们可能会耗尽大量的非托管内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读