博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谨慎设计一个单例类
阅读量:6252 次
发布时间:2019-06-22

本文共 1354 字,大约阅读时间需要 4 分钟。

   如果设计成一个单例类,虽然不存在对象频繁回收,可要长期占用资源。而且意味着外面对多线程,到了这里需要排队进入。什么时间设计成单例呢?设计一个单例就意味着, 我们存在资源竞争,必须的,二,我们要频繁创建对象,销毁对象(一般最多可见Utility)。资源竞争我们用在数据库操作,文件操作,队列,静态变量。但像上面说的,设计一个单例,问题很多,因为我们设计的想法,就是通用性。处了上面的情况,非必须最好不设计单例模式(效率问题),最佳的方式,让调用者根据使用情况单例化被调用者。好处是,一,延迟加载了使用时间,二、可以被调用者的销毁而回收。在设计单例时,我们要分析效率,我们经常设计的单例方式

 

public class VFactory {     private static VFactory instance = null;     private static object threadSafeLocker = new object();     public void Read()     {          }          public void Write()     {     }      public static VFactory Instance        {            get            {                if (null == instance)                {                    lock (threadSafeLocker)                    {                        if (null == instance)                        {                            instance = new VFactory;                                                   }                    }                }                return instance;            }        } }

很典型的单例,可问题很多,效率不高,所有线程在进入的时候,都需要排队,如果一个线程是要执行Read 而另一个要执行Write ,实际的情况我们大部门时间(一个共享变量或队例,不会改变)在浪费时间,read的时机我们不需要加锁,而仅仅Write时,所以设计一个静态方法,不是更好吗?而且如果是单例,那你必须小心操作它内部的变量不仅是Static 变量,private、 protected 也必须小心,如果不加锁,也是会出错误的。最好办法,让它的调用者控制,调用者如果是N个线程,那这N个线程都会指向一个单例地址Copy ,而在调用者内,都存在N份单例的内部变量。

    总结:非必须不设计单例模式,(.net 回收很快的) ,读写同时存在时,设计静态方法。让调者考虑实例方式。

    

转载于:https://www.cnblogs.com/shouhongxiao/p/3530091.html

你可能感兴趣的文章
编年史:OI算法总结
查看>>
IOS Exception 1(RangeText="[SKTexture]()")
查看>>
IOCP基础封装
查看>>
kendo column chart
查看>>
codeforces 721D Maxim and Array
查看>>
sass学习
查看>>
六、使用函数
查看>>
Windows Server 2012 蓝屏 Wpprecorder.sys 故障
查看>>
ImageMagick 批量处理图片脚本
查看>>
MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
查看>>
【IT公司笔试面试】75道逻辑推理题及答案
查看>>
免费馅饼
查看>>
《Typecript 入门教程》 1、类
查看>>
使用 xsd.exe 命令工具将 xsd 架构生成 类(CS) 文件
查看>>
分享一个漂亮的ASP.NET MVC黑色界面框架
查看>>
求出0~999之间的所有“水仙花数”并输出
查看>>
《文件管理》作业
查看>>
算术类型&确定编译环境的位数
查看>>
连接数据库基本步骤
查看>>
javascript基础篇:函数
查看>>