私のクラスは COM リソースを使用しており、IDisposable から継承しています。アンマネージ リソースをクリーニングするために、Marshall.ReleaseCOMObject() メソッドを呼び出している Dispose() メソッドがあります。COM リソースを解放するには?finalzier メソッドがあり、その中で Marshal または Dispose を呼び出すと、RCW エラーが発生し、ファイナライザー メソッドを削除すると、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;
}
}