静态使用性能惩罚?

For*_*er0 1 c#

我很好奇在使用“典型”方式导入静态类与使用“典型”方式导入静态类和使用接收器显式调用方法之间是否存在任何运行时性能损失using,特别是在涉及相当大的类时。

例如,我当前的项目使用 OpenGL,其中每个 OpenGL 函数都绑定到类中的一个静态方法Gl。我选择保持此类中的命名约定与其本地对应项(即glClearis Gl.glClear)相同。

然后我像这样使用这个类:

using static OpenGL.Gl;

void SomeFunction()
{
    glClear();
    // etc, etc
}
Run Code Online (Sandbox Code Playgroud)

……与此相反……

using OpenGL;

void SomeFunction()
{
    Gl.glClear();
    // etc, etc
}
Run Code Online (Sandbox Code Playgroud)

撇开命名约定不谈,在这种情况下将如此多的符号导入当前上下文是否有任何运行时惩罚(因为Gl该类具有数百个静态方法和公共常量)?

我并不真正关心构建时间或 IDE 上提供智能感知的额外工作量,只关心编译后的最终结果。

我的感觉是它只是语法糖并产生相同的 IL 代码,但我不太精通阅读 IL 以自信地确定这一点。

Jul*_*ian 5

这与编译器重写它是一样的。生成的中间语言代码甚至不知道“使用”。

https://www.codeproject.com/articles/1119847/csharp-compiler-implementation-of-csharp-features#use_sta

使用静态

...

如果您了解 CIL,就会知道名称空间的概念在 CIL 中并不真正存在。类型和成员名称通常解析为它们的完全限定名称。因此,使用 static 只是一种编译时语法糖,使我们比现在更懒惰。

附注。在这种情况下,CIL、IL 和 MSIL 是相同的