2010-05-06 49 views

回答

7

C#语言不会内联,但.NET CLR JIT编译器可以。

虚拟化可能在密封类中是内联的,但我不确定非密封类。我会假设没有。

JIT在执行代码之前进行优化,当函数被首次调用时。因为在JIT开始工作之前,您没有任何代码可以执行。 :P JIT只在第一次调用函数时发生,而不是在每次调用函数时发生。

还要注意内联只能在程序集(DLL)中完成。 JIT编译器不会复制另一个程序集中的代码以将其内联到此程序集的代码中。

7

C#不支持明确的内联。 JIT编译器可以在优化的同时在舞台后面进行一些内联​​。

4

C#编译器本身不会执行内联(您可以通过在Reflector中打开程序集来进行验证)。 CLR的JIT编译器确实内联了,关于这个主题,这里是one blog post(还有更多)。

请注意,一般而言,.NET编译器无法跨越DLL边界进行内联,因为在编译依赖于DLL的代码后,DLL可能会更改。因此在运行时进行内联是有意义的。