シングルトンクラス(ダブルチェックロック)を実装するコードをフォローしました
public sealed class Plugin
{
#region Private Fields
private static volatile Plugin _instance;
private static object syncRoot = new Object();
private Dictionary<int, string> myMap;
#endregion
private Plugin()
{
myMap = MapInit(GetMainModuleName());
}
static Plugin()
{ }
public static Plugin Instance
{
get
{
if (_instance == null)
{
lock (syncRoot)
{
if (_instance == null)
_instance = new Plugin();
}
}
return _instance;
}
}
}
シングルトン インスタンスはデバッグ モードで適切に構築されており、すべて正常に動作しているようです。しかし、リリース モードでは、インスタンスが適切に構築される前に返されます。つまり、myMap は初期化されません。
また、次のコードがデバッグ モードで完全に実行されるまでに約 10 ~ 15 秒かかることに注意してください。
myMap = MapInit(GetMainModuleName());
これはコンパイラの最適化の問題ですか? 助けてください