我的一个应用程序出现了一个看起来像内存泄漏的问题(该应用程序会随着时间的推移使用更多内存,大约一周后它会挂起)。
我已经检测并修复了一些与我编写的类相关的泄漏(比较使用 sos.dll 获取的堆转储很快就会发现它们),并且这些泄漏的数量不再增加。
目前,唯一随着时间显着增加的是 WeakReference
实例,它以每分钟 1,000 个新 WeakReference
实例的稳定速率增长。
我的代码不直接使用 WeakReference
,我从不自己创建。
什么会导致创建这么多 WeakReference
实例?
我正在使用 VB.NET、Visual Studio 2008 和 .NET 3.5
最佳答案
是的,这是 VB.NET 程序集中的一个相当臭名昭著的泄漏。它是由跟踪使用 WithEvents 关键字声明的事件的弱引用引起的。完成此跟踪以支持“编辑并继续”。它为类中声明的每个 WithEvents 事件泄漏一个 WeakReference 实例。需要附加调试器才能释放这些 WeakReference 对象。
解决方法很简单。发布 Release 版本,而不是 Debug 版本。
关于.net - 内存泄漏和弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917014/