多分それは私ですが、この(奇妙な)動作について疑問に思っています。
以下のスニペットを検討してください。これは、効果を説明するための最小限のコンソール プログラムです。
class MyClass { }
class Program
{
static void Main(string[] args)
{
var x = new MyClass();
var y = new MyClass();
x = null;
GC.Collect();
Console.ReadKey();
}
}
プログラムがキーを押して (またはブレークポイントを配置して) 停止すると、メモリ プロファイラーは 2 つの「MyClass」インスタンスがまだ参照されていることを示します。
はGC.Collect()
役に立ちませんし、プログラムを「リリース」として実行することもできません。
MyClass
少なくとも GC コレクションを強制することによって、参照されていないインスタンスをすぐに収集するべきではありませんか?
注: 大規模なコンソール アプリには、データを生成する一連のスレッドが含まれ、MyClass のようなインスタンスがコンシューマーとして機能します。インスタンスは 経由WeakReference
で参照されますが、それは問題ではないようです。問題は、すべてのテスト ライフサイクルを Main メソッドで実行してもコンシューマーを破棄できないことです。
前もって感謝します。