質問Can Timers get automatically garbage collected?のため、System.Timers.Timer
が最初にガベージコレクションされないことがわかっています。System.Timers.Timerを停止する必要がありますか?
私の実際の質問です - 私はタイマーを停止または処分する必要がありますか?
private void CreateTimer()
{
var timer = new Timer();
timer.Elapsed += TimerElapsed;
timer.Interval = 30000;
timer.AutoReset = true;
timer.Enabled = true;
}
このタイマーは永遠に動作します。しかし、今では、方法でタイマーを作成したオブジェクトはもう必要ありません。ガベージコレクションされたTimer
を停止または処分する必要がありますか?
停止と廃棄の間に違いがあります。タイマーを停止することは、タイマーのライフサイクル中に誰かが必要とするでしょう – apomene
あなた自身でそれを確認することができます:MesseBox.ShowのようなものをElapsedで作成し、例えばサブウィンドウを閉じることでオーナーを殺す。 – sTrenat
あなたは 'dispose'を呼び出すまでガーベジコレクションされないと思います。タイマーを停止するかどうかは関係ありません。詳細は、「コンポーネントへの最後の参照をリリースする前に、常にDisposeを呼び出します。それ以外の場合、ガベージコレクタがComponentオブジェクトのFinalizeメソッドを呼び出すまで、使用しているリソースは解放されません。https://msdn.microsoft.com/en-us/library/3cc9y48w(v=vs.110).aspx – Achilles