关于静态构造函数的利与弊

简介: 静态构造函数在两种情况下会执行:1,开发人员添加与 C# 中的类型具有相同名称的静态、无参数方法,来显式添加静态构造函数。2,类型具有一个用于静态字段的初始值设定项,在这种情况下,编译器会在后台添加静态构造函数。第一种情况会导致代码性能变差,微软建议在声明静态字段的位置对其进行初始化。对生成的代码进行反编译发现:1里运行库为了在精确时间运行类型初始值设定项而执行的检查会增加循环内的开销。1比

静态构造函数在两种情况下会执行:
1,开发人员添加与 C# 中的类型具有相同名称的静态、无参数方法,来显式添加静态构造函数。
2,类型具有一个用于静态字段的初始值设定项,在这种情况下,编译器会在后台添加静态构造函数。

第一种情况会导致代码性能变差,微软建议在声明静态字段的位置对其进行初始化。
对生成的代码进行反编译发现:
1里运行库为了在精确时间运行类型初始值设定项而执行的检查会增加循环内的开销。
1比2带来性能的下降,换取的好处是静态变量将在精确的可以预料到的时间被初始化。

很少有类会真正需要静态构造函数在一个精确的时间执行,因此在大多数情况下,
避免显式静态构造函数就非常有意义。

目录
相关文章
|
5月前
|
存储 设计模式 编译器
【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的高级应用
【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的高级应用
66 2
|
5月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
51 3
|
5月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(二):类的默认成员函数详解
【C++篇】C++类与对象深度解析(二):类的默认成员函数详解
41 2
|
存储 C++ 开发者
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
158 0
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
|
Java
Java面向对象(15)--static关键字静态理解与使用
Java面向对象(15)--static关键字静态理解与使用
143 2
|
存储 Java 编译器
【C++初阶:类和对象(上篇)】类的定义 | 类的访问限定符及封装 | 类的作用域 | 类的实例化 | 类对象模型 | this指针
【C++初阶:类和对象(上篇)】类的定义 | 类的访问限定符及封装 | 类的作用域 | 类的实例化 | 类对象模型 | this指针
214 0
【C++初阶:类和对象(上篇)】类的定义 | 类的访问限定符及封装 | 类的作用域 | 类的实例化 | 类对象模型 | this指针
|
C#
改善C#程序的157个建议——建议33学习笔记:避免在泛型类型中声明静态成员
改善C#程序的157个建议——建议33学习笔记:避免在泛型类型中声明静态成员
169 0
艾伟_转载:静态构造函数趣谈!
  类的静态构造函数也叫类型构造器,静态构造器,他调用的时刻由CLR来控制:   CLR会选择如下时间之一来调用静态构造函数:      1,在类型的第一个实例创建之前,或类型的非继承字段或成员第一次访问之前。
743 0