当前位置:  开发笔记 > 编程语言 > 正文

C#WPF中的内存泄漏

如何解决《C#WPF中的内存泄漏》经验,为你挑选了2个好方法。

我可以使用一些建议来跟踪C#中内存泄漏的原因.我理解什么是内存泄漏,我知道它们出现在C#中的原因,但我想知道你过去用什么工具/策略来解决它们?

我正在使用.NET Memory Profiler,我发现我关闭它管理的窗口后,我的一个巨大的主要对象是留在内存中,但我不知道如何处理严重的所有链接.

如果我不够清楚只是发一个问题的答案,我会编辑我的问题作为回应.谢谢!



1> Daniel Earwi..:

进入调试器,然后在立即窗口中输入:

.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll

sos.dll的路径各不相同.找出正确路径的方法是在"模块"窗格中查找mscorwks.dll.从哪里加载是sos.dll的正确路径.

然后键入:

System.GC.Collect()

这将确保收集任何无法到达的内容.然后键入:

!DumpHeap -type 

这将显示包含地址的所有现有实例的表.您可以找到保持实例活着的内容,如下所示:

!gcroot 



2> Bradley Grai..:

.NET Memory Profiler是一个很好的工具,我经常使用它来诊断WPF应用程序中的内存泄漏.

我确信您知道,使用它的一个好方法是在使用特定功能之前拍摄快照,然后在使用它之后拍摄第二个快照,关闭窗口等.比较两个快照时,您可以看看有多少个特定类型的对象被分配但未被释放:这是一个泄漏.

双击类型后,探查器将显示最短的根路径,使该类型的对象保持活动状态..NET对象在WPF中有许多不同的泄漏方式,因此发布您看到的根路径应该有助于确定最终原因.但是,一般情况下,尝试理解为什么这些对象会抓住您的对象,并查看是否有某种方法可以在窗口关闭时分离事件处理程序,绑定等.

我最近发布了一篇关于特定内存泄漏的博客文章可能是由某些绑定引起的; 对于那些特定类型的泄漏,那里的代码对于找到有错误的Binding非常有用.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有