■28285 / ) |
Re[10]: ガベージコレクションについて |
□投稿者/ NyaRuRu (72回)-(2008/11/22(Sat) 21:07:26)
|
2008/11/22(Sat) 21:08:33 編集(投稿者) 2008/11/22(Sat) 21:07:57 編集(投稿者)
■No28284 (渋木宏明(ひどり) さん) に返信 > ウィンドウやファイル、タイマ等々、OSが管理しているリソースを使用する際は、それらの寿命管理はプログラマの責任で行うものなのです。
実際,公開されている BCL のソースを呼んでみると,ライブラリ側で GC 回避の工夫が行われているケースもありますね. 以前 System.Windows.Forms.Timer (今回問題になっている System.Timers.Timer ではない) のソースを確かめてみたら,タイマを有効にしている間は GCHandle で自分自身をルート参照に加えていました.
他方,System.Threading.Timer (これも今回問題になっている System.Timers.Timer ではない) はそういう処理を呼び出し側の責任ととらえているのか,ドキュメントにはこう書かれたままですね. http://msdn.microsoft.com/ja-jp/library/system.threading.timer.aspx >Timer を使用している間は、このクラスへの参照を保持しておく必要があります。 >他のマネージ オブジェクトと同様、まったく参照されていない場合、Timer はガベージ コレクションの対象となります。 >Timer がアクティブであっても、ガベージ コレクションの対象から除外されることはありません。 (こちらもソースが公開されてますので,興味がある方は実際の実装がどうなっているか調べてみてください)
|
|