IDisposable を実装するメンバー (obj) を持つ単純なクラス MyDataClass があります。
public class MyDataClass : IDisposable
{
private DisposableObject obj;
private List<string> list;
private int c;
public MyDataClass()
{
obj = new DisposableObject();
list = new List<string>();
c = 114;
}
public void Dispose()
{
obj.Dispose();
}
}
public class DisposableObject : IDisposable
{
public void Dispose()
{
// Free resource
Console.WriteLine("Dispose DisposableObject");
}
}
コード分析を実行すると、 MyDataClass実装のDispose()メソッドでGC.SuppressFinalize()メソッドを呼び出す必要があることを示す CA1063 警告が表示されます。
そして、私はこの CA1063 警告について本当に混乱しています。私の知る限り、GC.SuppressFinalize()を呼び出してガベージ コレクターに通知する必要があるためです。
「ヘイ GC、このオブジェクトについては心配しないでください。私はすでにすべてのクリーニング作業を行っているからです!」
だから、私が間違っているかどうかを確認してください。GC.SuppressFinalize()を追加すると、CA1063 は削除されますが、GC でオブジェクトがクリーンアップされません。したがって、他のクラス メンバー (マネージ コード) が消去されないため、メモリ リークが発生します。