有2个类:
public class MyClass
{
public int Prop { get; set; }
}
public class MyClass2
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public int Prop3 { get; set; }
public int Prop4 { get; set; }
public int Prop5 { get; set; }
}
这些类的构造函数是否会在相同的时间内工作?
研究表明,构造函数的执行时间取决于分配给类实例的内存量。因此,具有隐式获取/设置(如您的)的字段和属性会影响,而具有显式获取/设置的方法和属性不会影响(实例中没有为它们分配内存)。
结果(启用优化)
根据我的计算,类初始化时间由公式描述
t=(2.6*s+43.8)/(10^7) 毫秒
其中 s 是为其分配内存的所有成员类型的总大小(见上文),
相关系数为 0.99。
我认为,常量组件的存在可以通过服务信息的存在来解释,据推测,在该服务信息下分配了 16 个字节。
该研究是在一台处理器时钟速度为 2.33 GHz 的机器上进行的。要计算与机器无关的时间,必须将此公式乘以时钟频率,得到以“处理器周期”为单位的时间:
t = 0.6*s+10.9
由于没有属性初始化,IL 代码将是相同的并且很可能在速度上没有差异。
MyClass2 的 IL:
MyClass 的 IL:
还是有区别的,我使用BenchmarkDotNet进行了测试。这很可能是因为对于自动属性的字段,在创建类时会调用默认构造函数。程序代码:
结果: