csharp设计方法


public class hugryman

私有构造

private hugryman()

私有静态只读实例化

private static readonly hugryman _hugryman=new hugryman();

公有静态读取方法

public static hugryman()

return _hungryman

多次获取的是同一个实例

gethashcode发现是同一个对象

数值一样



缺点

一开始就实例化 浪费性能




改懒汉式

layman

私有构造

私有静态字段

private static _layman

公有静态读取同时实例化

在getlazyman里面实例化

null的时候创建 防止多次实例化

(都要静态)



缺点

会重复创建

如果多个程序同时进入,会实例化多次

重复实例化的缺点

改进方法:

var obj=new object()

lock(obj)

{

}

花括号的内容只允许一个线程进行

例子

private static layman _layman

public static layman getlazyman()

lock(o){

if (_layman==NULL)

{_lazyman=new lazyman()}

}

return _layman

lock实际上是

monitor.enter()

monitor.exit()

防止指针重排的方法

volatile



饿汉式的改造方法

静态内部类

hugrymanstatic

private hungrymanstatic()

private static class innerclass()

{

var _hungrymanstatic=new hungrymanstatic()

}

public static Gethungrymanstatic()

{

return _hungrymanstatuc

}

静态内部类 只在类加载的时候创建一次实例

不会浪费资源



相关推荐
chao1898442 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
月昤昽2 小时前
autocad二次开发 2.旋转
c#·autocad·autocad二次开发
rockey6273 小时前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
工程师0073 小时前
C# 字符串不可变性 + 字符串驻留池原理
c#·字符串拘留池
唐青枫8 小时前
内存为什么越来越高?C#.NET GC 详解:分代回收、LOH、终结器与性能优化实战
c#·.net
xiaohe079 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
yngsqq1 天前
平面图环 内轮廓
c#
rockey6271 天前
AScript之eval函数详解
c#·.net·script·eval·expression·动态脚本
He少年1 天前
【AI 辅助案例分享】
人工智能·c#·编辑器·ai编程
工程师0071 天前
栈和堆的概念
c#·栈和堆