タイマーのドキュメントを見ているときに、次のコメントで次の例に出くわしました。
// Normally, the timer is declared at the class level,
// so that it stays in scope as long as it is needed.
// If the timer is declared in a long-running method,
// KeepAlive must be used to prevent the JIT compiler
// from allowing aggressive garbage collection to occur
// before the method ends. You can experiment with this
// by commenting out the class-level declaration and
// uncommenting the declaration below; then uncomment
// the GC.KeepAlive(aTimer) at the end of the method.
//System.Timers.Timer aTimer;
code in between
// If the timer is declared in a long-running method, use
// KeepAlive to prevent garbage collection from occurring
// before the method ends.
//GC.KeepAlive(aTimer);
これは、副作用があったとしても、C# の GC がローカル変数のガベージ コレクションを許可されていることを意味しますか? おそらく、後で再びタイマーにアクセスしていないため、GCはそれをより早く収集できますか?
これを正しく理解していれば、私がそのような最適化のファンであるかどうかはわかりません(しかし、おそらくそうではありません;))