Gar*_*yJL 21 c# singleton static multithreading
我有一个实现Singleton设计模式的对象缓存.我对单例的方法总是在首次访问属性时延迟加载静态实例.
public static Widget
{
get
{
if(instance==null) instance = new Widget();
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我知道这种方法不是线程安全的,并且实例检查为null会导致效率低下.在实例化静态实例的类上实现静态构造函数是否明智?
据我所知,只要第一次静态属性访问发生,就会调用静态构造函数.这是否有效,它是否会提供超过当前延迟加载方法的任何好处,或者更好地探索代理实现,还是使用锁来强制它是线程安全的?
public static Widget
{
get
{
if(instance==null)
{
lock(padlock)
{
if(instance==null) instance = new Widget();
}
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有很多静态构造函数的经验,所以如果它是延迟加载属性的相同或更差的实现,不要想要实现这个想法.
干杯,加里
| 归档时间: |
|
| 查看次数: |
10901 次 |
| 最近记录: |