System.Timers.Timer
シングルトンのメンバーにするのは理にかなっていvolatile static
ますか?
シングルトン インスタンス コンテキストで_fooTimer
static
and またはを作成しても違いはありますか?volatile
私がしなくても違いはあり_instance
static
ますか?
EDIT2:コードサンプルを修正し、不要な静的フィールドまたは揮発性フィールドのないシングルトンを改善し、Interlock.Increment に変更しました
public sealed class Foo
{
private static readonly object _syncRoot;
private int _counter;
private Timer _fooTimer;
private static Foo _instance;
private Foo()
{
_counter = 0;
_syncRoot = new object();
_fooTimer = new new Timer();
_fooTimer.Intervall = 3600000;
_fooTimer.Elapsed += new ElapsedEventHandler(LogFoo);
}
public static Foo Instance
{
get
{
lock(_syncRoot)
{
if (_instance == null)
{
_instance = new Foo();
}
}
return _instance;
}
}
private void LogFoo()
{
// write a logfile with _counter - then restart timer and set _counter to 0
}
public void Increment()
{
Interlocked.Increment(_counter);
}
}
public class UseTheFoo
{
// Foo.Instance.Increment()
...
}