[英]Memory leak in .Net
我想知道 memory 是否真的被泄露了。 我的场景是这样的:
这是 memory 泄漏还是可能是垃圾收集器没有清除 memory 的情况。
并且作为事件也被视为参考。 如果事件出现在取消引用的 object 中怎么办? 那么该事件不会被视为参考,对吗?
垃圾收集器只释放不再引用的对象。
它不会神奇地删除您不再需要的所有对象。
检查您是否仍有对任何对象的引用。 请记住,事件也被视为引用。 (需要知道 object 到 go 到哪个)
Memory 仅在需要时进行垃圾收集,当所谓的第 0 代已满或整个系统 memory 压力足以强制进行垃圾收集时更具技术性。 Memory 出 scope 时不会自动回收。 更多信息在这里和这里。
只是为了测试,在关闭对话框后(不再引用它之后)尝试调用GC.Collect()
) 以强制 GC 收集任何可用的 memory。
实际上,您不应该摆弄垃圾收集器,它经过大量调整以获得最佳性能。
如果您怀疑您确实泄漏了 memory,请使用某种 memory 分析器来分析您的应用程序。
尝试例如RedGates Memory Profiler ,他们有一个基于时间的试验。
按照此演练快速了解要查找的内容和方法。
In.Net 一旦你不引用 object,object 就会被收集回来。 如果您有实时参考,则 object 将保持活动状态。 因此,要找到 memory 泄漏,您需要执行以下操作
您可以使用一些 memory 分析器来执行此操作,也可以使用 WinDbg+sos。 人们觉得 windbg 很难使用,但对于这些情况,windbg+sos 更容易使用并且是免费的。 修复泄漏后,您也会感到高兴。 您将成为那些总是喜欢免费强大工具的人之一。
看看这个链接。
http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx
如何使用 memory 分析工具(例如JetBrains dotTrace )来分析您的应用程序的 memory 使用情况?
可能是垃圾收集器没有清除 memory
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.