单例模式 ---懒汉-饿汉--线程安全懒汉
单例模式
C#中单例模式主要用于实现一个对象只有一个实例,有懒汉和饿汉两种实现方式。
实现一个类只有一个实例解释:(同一个对象每new一次,会生成一个新的哈希Code、所以本质上它们不一样了,长此以往就会浪费资源,单例模式主为解决这个问题,保证数据一致性、节省资源)

①懒汉实现方式是当引用实例的时候初始化,需要用两个if判断和加锁,来避免多线程的情况产生多个实例,优点是占用内存少,缺点是可能引发性能问题
②饿汉模式方式是直接实例化,优点是提前初始化,性能快,缺点是占用内存多(一开始就实例化,后面用不到白占用空间资源、浪费)
单例模式在C#的项目中使用的场景有: 配置文件加载、Session实现
懒汉
当引用实例的时候实例化--什么时候用什么时候实例化
//单线程情况


//多线程情况

//多线程情况的懒汉方式存在问题 --调用时候出现问题(因为有可能个别线程运行时间比较长,后面线程又运行过来,所以出现哈希code不一样的情况)

解决:加锁--需要等上个线程运行后,后面的线程再运行(安全-保证用的是一个实例-但不完善)
当前加锁后的结果:

又存在问题--不完善
----起锁耗费性能(上面那种情况会频繁起锁,来一个线程就要上一个锁)
完善:双if加锁
和上面结果一样,但是比他完善

饿汉
声明时直接实例化
①声明时直接实例化
②用的时候直接取的

③使用结果

本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/16514001.html

浙公网安备 33010602011771号