静态使用性能损失?

时间:2019-06-24 22:36:44

标签: c#

我很好奇在使用using导入静态类与导入“典型”方式与使用接收方显式调用方法之间是否存在运行时的性能损失,特别是当它上了相当大的一堂课。

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

然后我使用这样的类:

using static OpenGL.Gl;

void SomeFunction()
{
    glClear();
    // etc, etc
}

...与此相反...

using OpenGL;

void SomeFunction()
{
    Gl.glClear();
    // etc, etc
}

除了命名约定之外,在这种情况下,是否有运行时代价将如此多的符号导入当前上下文(因为Gl类具有数百个静态方法和公共常量)?

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

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

1 个答案:

答案 0 :(得分:4)

与编译器重写它相同。生成的中间语言代码甚至都不知道“用法”。

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

  

使用静态

     

...

     

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

PS。在这种情况下,CIL,IL和MSIL相同