C#におけるListの要素に対するGCの扱いについて
現在、以下の環境でWindowsアプリを作成しています。
- フレームワーク: .NET Framework 4.5.2
- 言語: C#
- ターゲットPC: Windows10 x64
そこで、掲題の件について質問です。
以下の様なコードでタイマを登録しているのですが、どうも2,3時間程度稼働してからタイマが止まっているようなのです。
ガベージコレクタかな?と思ったのですが、「GC.KeepAlive()」とtimers変数にタイマインスタンスを登録しています。
using System.Timers;
public class TimerSample {
private static List<Timer> timers = new List<Timer>();
private static void schedule() {
var timer = new Timer();
GC.KeepAlive(timer);
timers.Add(timer);
// タイマの設定処理...
timer.Start();
}
}
例えば、KeepAliveがうまく効いていないとしたときに、インスタンスの参照を維持する為に行った、timers変数(List)へのタイマインスタンスはGC回避に有効でしょうか。
Listの要素については参照されているとみなされずGCされてしまうでしょうか。