GC.Collect
は、バックグラウンドスレッドでガベージコレクションを開始し、すぐに戻ります。 GC.Collect
を同期的に実行するにはどうすればよいですか?ガベージコレクションの完了を待ちますか?GC.Collectを同期的に実行します
これはNUnitテストの文脈の中にあります。私はgcConcurrentの設定をテストアセンブリのapp.configファイルに追加しようとしましたが、nunit.exe.configで同じことを試しました。何も影響はありませんでした。デバッグすると、GC.Collect
(NUnitの "TestRunnerThread")と呼ばれるスレッドではなく、 "GC Finalizer Thread"でファイナライザが実行されており、両方のスレッドが同時に実行されています。
背景:特定のクラスがリークすると(破棄しないでください)、テストが失敗します。だから私はそのクラスにスタティックwasLeaked
フラグを設定するファイナライザを追加しました。私のテストTearDownはGC.Collect()
を呼び出し、wasLeaked
が真であればスローします。しかし、確定的に失敗するわけではありません。wasLeaked
と読むと、通常ファイナライザはまだ呼び出されていないからです。 (ガベージコレクションが最終的に終了した後にそれは、代わりにいくつかの後にテストを失敗した。)
パーフェクト!これはまさに私が探していたものです。ありがとう! –