Sco*_*pey 6 .net c# performance static static-constructor
第一次访问静态成员时会执行静态构造函数.知道了这一点,我有几个问题:
[编辑]:我想澄清一点,我不关心微优化.
我问这个问题,因为这是一个设计决定.如果静态构造函数会导致性能损失,那么我将考虑到这一点设计我的代码,并且会更加了解可能影响性能的决策.
这是一个例子来说明我的问题.采用该Independent方法并将其置于单独的静态类中会有什么好处吗?这样,就不必检查静态Test是否已初始化.[ 更新请参阅下面的答案以获得更好,更简单的示例].
static class Test {
// Static constructor with dependent method:
static int x;
static Test() { x = 5; }
static int Dependent() { return x; }
// Static, independent method:
static int Independent(int y) { return y+1; }
}
Run Code Online (Sandbox Code Playgroud)
静态构造函数的执行由应用程序域中发生的以下第一个事件触发:
- 创建了一个类的实例.
- 引用该类的任何静态成员.
由于缺乏答案,在@ Jobo的指导下,我决定自己测试一下.
这是我的测试类:
static class WithConstructor {
static WithConstructor(){ }
public static int Square(int x){ return x*x; }
}
static class NoConstructor {
public static int Square(int x){ return x*x; }
}
Run Code Online (Sandbox Code Playgroud)
编译为Release,使用.NET 4.0,结果非常一致:
???????????????????????????????????????????????????????????? ? Iterations: ? With Constructor ? 4513 ms ? Improvement: ? ? 1000000000 ? No Constructor ? 3072 ms ? 33% ? ????????????????????????????????????????????????????????????
因此,我将回答我自己的问题:
如果存在静态构造函数,则静态方法将导致(微观)性能损失,因为beforefieldinit必须始终检查该标志.
如果不存在静态构造函数,则该方法不会导致性能损失.
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |