我的班级正在使用 COM 资源,并且我从 IDisposable 继承了它。为了清理非托管资源,我有调用 Marshall.ReleaseCOMObject() 方法的 Dispose() 方法......所以我的问题是我们还需要 Destructor 方法(Finalizer)吗?释放COM资源?当我确实有 finalzier 方法并在其中调用 Marshal 或 Dispose 时,我会收到一个 RCW 错误,当我删除 finalizer 方法时,我不会再收到 RCW 错误但是如果我查看内存分析器,我可以看到非托管资源每次打开包含此 COM 资源的表单时,内存都会不断增加...所以看起来它没有清理它?那么在 C# 应用程序中清理 COM 资源的正确方法是什么?
我将使用我很快拥有的一些代码示例来更新问题。
谢谢。
private MyCOMobject theCOMobject = null;
static SuppressFieldCntrlr()
{
new SomeCalss();
}
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
//nothing in here, is it just for Managed Resources?
}
Marshal.ReleaseComObject(this);
MethodFoo(false);
disposed = true;
}
}