关于C#的几个问题
答案 0 :(得分:7)
C#不支持任何内联。在优化时,JIT编译器可以在舞台后面进行一些内联。
答案 1 :(得分:7)
C#语言不进行内联,但.NET CLR JIT编译器可以。
Virtuals可能在密封类中可以内联,但我不确定非密封类。我不会假设。
JIT在执行代码之前优化,首次调用函数时。因为在JIT开始工作之前,您没有任何代码要执行。 :P JIT在第一次调用函数时只发生一次,而不是每次调用函数时都会发生。
另请注意,内联仅在程序集(DLL)中完成。 JIT编译器不会从另一个程序集中复制代码,以将其内联到此程序集的代码中。
答案 2 :(得分:4)
C#编译器本身不进行内联(可以通过在Reflector中打开程序集来验证)。 CLR的JIT编译器进行了内联,这里的主题是one blog post(还有更多内容)。
请注意,一般情况下,.NET编译器不能跨DLL边界进行内联,因为DLL可以在依赖于已编译DLL的代码之后更改。因此,在运行时进行内联是有意义的。