【发布时间】:2012-10-15 16:17:28
【问题描述】:
我需要使用无法修改的外部程序集。假设我使用该程序集中的一个类,如下所示:
using (ExternalWidget widget = new ExternalWidget())
{
widget.DoSomething();
}
每次我调用此代码时,它都会泄漏非托管内存。 ExternalWidget 实现 IDisposable 并且我已将其包装在 using 语句中,但 ExternalWidget 不会清理其非托管资源。
由于我无权访问ExternalWidget 代码,因此我无法以正确的方式解决此问题。有没有其他方法可以释放ExternalWidget使用的内存资源?
【问题讨论】:
-
创建一个演示问题的小示例程序并联系库的作者。
-
如果您知道内存泄漏的原因,您可能可以使用反射来修复它(我们必须使用旧版本的 Infragistics 控件库来做到这一点)。
-
你怎么知道它没有清理非托管资源?
-
您也可以将外部组件拆开,修复泄漏,然后重新组装。
-
@Dan Puzey 我使用了 ANTS Memory Profiler,它显示每次调用代码时我的所有 .NET 堆都被释放。但是,非托管内存和私有字节总数继续上升。
标签: c# .net memory-management memory-leaks dispose