Ale*_*nor 11 c# .net-4.0 lazy-initialization
最近我遇到了一个singelton类的问题,这个类很懒,初始化一个字典,其中第二个线程会在实际填充之前尝试使用它.所以我通过Lazy<T>类实现了变量初始化.
这是我的代码:
private static Dictionary<string, string> GroupDefaults
{
get { return mGroupDefaults.Value; }
}
private static Lazy<Dictionary<string, string>> mGroupDefaults =
new Lazy<Dictionary<string,string>>(delegate
{
Dictionary<string, string> defaults = new Dictionary<string, string>();
foreach (KeyValuePair<string, UnitGroup> groupDef in Groups)
defaults.Add(groupDef.Key, groupDef.Value.First().Key);
return defaults;
});
Run Code Online (Sandbox Code Playgroud)
这解决了这个问题,现在我正在考虑将这个作为我的常规做法,Lazy<T>在我做懒惰初始化的任何地方使用该类,以避免任何可能的线程问题.所以基本上我想知道这是不是很好/普遍的做法?或者它会对性能有什么影响?
dle*_*lev 12
在不知道你有什么类型的性能限制的情况下很难说,但根据我的经验,一次性初始化很少成为瓶颈(因为根据定义它只发生一次.)Lazy<T>是为了向你提供这个确切的服务而编写的,所以我会建议使用它.