第一次访问静态成员时会执行一个静态构造函数。知道这个,我有几个问题:静态构造函数可以降低访问静态方法的性能吗?
- 这是否意味着每次访问静态方法时,运行时都必须检查静态构造函数是否已被调用?
- 这是否会导致性能下降?
- 做“无构造函数”的静态类可以避免这种性能下降吗?
[编辑]:我想澄清一点,我不关心微观优化。
我在问这个问题,因为它是设计的决定。如果一个静态构造函数导致性能下降,那么我会根据这个设计我的代码,并且会更加意识到可能影响性能的决定。
下面是一个例子来说明我的问题。采取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; }
}
Here's the quote约静态构造的C#规格:
静态构造的执行是由第一 以下事件到应用程序域内发生触发:
- 创建该类的一个实例。
- 引用该类的任何静态成员。
可能的重复:http://stackoverflow.com/questions/2921828/static-constructors-cause-a-performance-over-head –
我读过这篇文章,但它绝对不同于我的问题。它比较了**类型初始化** vs **静态构造函数**的性能。我有兴趣知道访问方法是否被静态构造函数放慢了。我重新阅读“重复”,包括所有答案和链接,但仍然没有答案给我的问题! –
我认为这是在字段访问而不是方法调用。但是,是的,在某些情况下可以显着降低性能。 – CodesInChaos