.NET中的内存泄漏

问题描述

| 我想知道内存是否真的泄漏了。我的Scenaio就像: 我的.Net应用程序占用了x的内存量。 我打开了一些对话框,现在需要x + y的内存 关闭所有最近打开的对话框 静态内存在x + Y左右 这是内存泄漏还是垃圾回收器没有清除内存的情况。 并且作为事件也被视为参考。如果事件出现在取消引用的对象中怎么办?那么该事件将不被视为参考,对吗?     

解决方法

垃圾收集器仅释放不再引用的对象。 它不会神奇地删除您不再想要的所有对象。 检查您是否仍然引用任何对象。请记住,事件也被视为引用。 (它需要知道要转到哪个对象)     ,仅在需要时才对内存进行垃圾回收,而在所谓的第0代已满或系统整体内存压力足以强制进行垃圾回收时,则采用更多技术。超出范围时,不会自动回收内存。在这里和这里的更多信息。 仅出于测试目的,请尝试在关闭对话框后(不再引用该对话框)后调用ѭ0,以强制GC收集任何可用的内存。 实际上,您不应该摆弄垃圾收集器,它是为获得最佳性能而进行大量调整的。 如果您怀疑确实在泄漏内存,请使用某种内存分析器来分析您的应用程序。 例如尝试RedGates Memory Profiler,他们有一个基于时间的试用版。 遵循此演练以加快速度,并了解一些要查找的内容和方法。     ,在.Net中,一旦您不引用对象,该对象就会被收集回来。如果您有实时引用,则该对象将保持活动状态。因此,要查找内存泄漏,您需要执行以下操作 查找对象列表和占用的内存 确定您怀疑现在应该释放的对象。 找到保存该对象的根。 修复根。 您可以使用某些内存分析器执行此操作,也可以使用WinDbg + sos。人们觉得windbg很难使用,但在这些情况下,windbg + sos更加易于使用并且免费。修复泄漏后,您也会感到高兴。您将永远是喜欢免费强大工具的人之一。 看一下这个链接。 http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx http://blogs.msdn.com/b/delay/archive/2009/03/11/where-s-your-leak-at-using-windbg-sos-and-gcroot-to-diagnose-a-net-内存泄漏     ,如何使用诸如JetBrains dotTrace之类的内存分析工具来分析应用程序的内存使用情况?     ,可能是垃圾回收器没有清除内存的情况