C#で機能のこのペアを考えてみましょう:このタイマーはメモリから解放されますか?
void func1() {
DispatcherTimer tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(5);
tmr.Tick += func2;
tmr.Start();
}
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
}
関数func1()を呼び出した後、一度、関数func2()はその範囲が制限されているので、私は私のタイマーへの参照を失うことにもかかわらず、それ以降5秒ごとに呼び出され〜func1()。つまり、func1()が呼び出されてからずっと、タイマーは明らかにメモリ内に残っています。
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
((DispatcherTimer)a).Stop()
}
タイマーがすぐ後に、ガベージコレクションによってピックアップされるか、またはそれはプログラムが終了するまでメモリに滞在していきます:私は関数func2()にこれを追加する場合、私の質問は、ありますか?それがメモリに残っている場合は、手動でコレクションにマークを付けるにはどうしたらいいですか?
私が持っている第二の質問(あなたが答えたいと思っている場合)は、この状況で正規のタイマーがまったく同じ動作をするか、または私が知るべき重要な違いがあるかどうかです。
ありがとうございます!