public class MonDac { private static MonDac _instance; public static MonDac Instance { get { _instance = new MonDac(); return _instance; } } public void UpdateMethod(int ID) { ... } } MonDac.Instance.UpdateMethod(1);
与
public class MonDac { public static void UpdateMethod(int ID) { ... } } MonDac.UpdateMethod(1);
有高人能指教这两种写法的区别和效率的不同之处吗?
效率上第2种高一些,第1种需要创建MonDac的实例,第2种不需要。
如果每次调用都会创建一个新的实例,是不是内存会一直增长呢?
@董先生:
第1种方式是单例,并不存在“每次调用都会创建一个新的实例”
如果不用单例,虽然“每次调用都会创建一个新的实例”,也会不造成内存一直增长,因为有GC
我这么理解的,按照你第一种写法,其实调用多少次updateMethod方法就创建了多少个静态的_instance,而且静态变量不会自己销毁,所以这个方式非常浪费空间。第二种方式定义静态方法是一种效率高的方式。第一种其实可以改进下,get方法里面做下判断if(_instance!=null){...}
应该这样,就不会创建多个实例了。
private class MonDac { private static object syncObj = new object(); private static MonDac _instance; public static MonDac Instance { get { if (_instance == null) { lock (syncObj) { if (_instance == null) { _instance = new MonDac(); } } } return _instance; } } }
另外第二个是在你应用程序启动的时候就创建好,一个增加少量的启动初始化时间,一个如果你的应用程序从头到尾没有使用过MonDac,那么你创建一个静态实例就属于资源浪费了。
所以:其实我觉得第一个方案还比较好些,实际上也只创建一个实例(按我的修改后),并且满足在使用的时候才创建实例并且只创建一个。