gpt4 book ai didi

c# - 静态构造函数会降低访问静态方法的性能吗?

转载 作者:太空狗 更新时间:2023-10-29 21:19:07 25 4
gpt4 key购买 nike

静态构造函数在您第一次访问静态成员时执行。知道这一点,我有几个问题:

  • 这是否意味着每次访问静态方法时,运行时都必须检查静态构造函数是否已被调用?
  • 这会影响性能吗?
  • “无构造器”静态类是否避免了这种性能损失?

[编辑]:我想澄清一下,我不关心微优化。
我问这个问题是因为这是一个设计的决定。如果静态构造函数导致性能下降,那么我在设计代码时会考虑到这一点,并且会更加注意可能影响性能的决策。

这里有一个例子来说明我的问题。采用 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# 规范:

The execution of a static constructor is triggered by the first of the following events to occur within an application domain:

  • An instance of the class is created.
  • Any of the static members of the class are referenced.

最佳答案

由于缺乏答案,在@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; }
}

Compiled for Release,使用.NET 4.0,结果非常一致:

╔═════════════╦══════════════════╦═════════╦═══════════════╗║ Iterations: ║ With Constructor ║ 4513 ms ║ Improvement:  ║║ 1000000000  ║ No Constructor   ║ 3072 ms ║ 33%           ║╚═════════════╩══════════════════╩═════════╩═══════════════╝

因此,我要回答我自己的问题:

  • 如果存在静态构造函数,那么静态方法将导致(微观的)性能下降,因为必须始终检查 beforefieldinit 标志。

  • 如果不存在静态构造函数,则该方法不会导致性能下降。

关于c# - 静态构造函数会降低访问静态方法的性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com