は、C#を使用して次のシナリオを考える:.NETガベージコレクタ「競合状態」
Someclass lInstance = new SomeClass();
System.WeakReference lWInstance = new System.WeakReference(lInstance);
lInstance = null;
System.GC.Collect();
System.GC.SuppressFinalize(lWInstance.Target);
SuppressFinalizeが実行されると、GCスレッドが工assのファイナライザコードの内側にすでにあることを想像してみてください。
問題は何が起こるかです。 GCスレッドがFinalizerに入ったら、何も効果がないと思います。
あなたはそれを試して何が起こったのですか?私はときどきファイナライザが実行され、ときどき実行されないと思います。 – dtb
System.GC.Collect()は何もする保証はありません。それは単にコレクションをスケジュールするかもしれない。私の推測では、ファイナライゼーションが開始されると、それはいくつかの余分なチェックがない限り停止されません。 – CodingBarfield
なぜ気にしますか? 'SuppressFinalize'はパフォーマンスの最適化でなければなりません。 – CodesInChaos