静态构造函数和单例类
我有一个实现Singleton设计模式的对象缓存。 当我第一次访问属性时,我对单例的方法总是延迟加载静态实例。
public static Widget
{
get
{
if(instance==null) instance = new Widget();
return instance;
}
}
但是,我知道这种方法不是线程安全的,而对于实例为空的检查引入了一个小的低效率。 在实例化静态实例的类上实现静态构造函数是否明智?
据我了解,每当第一个静态属性访问发生时,都会调用静态构造函数。 这是否有效?它是否会为当前的懒惰加载方法提供任何好处,或者是探索代理实现还是使用锁来强制它是线程安全的?
public static Widget
{
get
{
if(instance==null)
{
lock(padlock)
{
if(instance==null) instance = new Widget();
}
}
return instance;
}
}
我对静态构造函数没有太多的经验,所以如果这个想法是延迟加载属性的相同或更差的实现,那么不希望跳过这个想法。
干杯,加里
Jon Skeet在讨论这个问题的单身人士上有一篇不错的文章。
我不推荐使用自己的线程安全的懒惰初始值设定项,并且可能弄错了,我建议使用Joe Duffy的懒惰初始值设定项类。
http://www.bluebytesoftware.com/blog/PermaLink,guid,a2787ef6-ade6-4818-846a-2b2fd8bb752b.aspx
链接地址: http://www.djcxy.com/p/78789.html