views:

125

answers:

3

A couple of questions on C#

  1. Does C# support runtime inlining?
  2. Does JIT's optimizate before or during the execution of the code?
  3. Can a virtual function be inlined?
+7  A: 

C# doesn't support any inlining explicitly. JIT compiler may do some inlining behind the stage while optimizing.

Andrey
+5  A: 

C# the language doesn't do inlining, but the .NET CLR JIT compiler can.

Virtuals might be inline-able in a sealed class, but I'm not sure about non-sealed classes. I would assume not.

JIT optimizes before the execution of the code, when a function is first called. Because before the JIT goes to work, you don't have any code to execute. :P JIT happens only once on the first call to a function, not on every call to the function.

Note also that inlining is only done within an assembly (DLL). The JIT compiler will not copy code from another assembly to inline it into the code of this assembly.

dthorpe
+3  A: 

The C# compiler itself does not do inlining (which you can verify by opening the assembly in Reflector). The CLR's JIT compiler does inlining, here is one blog post on the subject (many more are out there).

Note that in general, .NET compilers cannot do inlining across DLL boundaries since a DLL can change after code that depends on the DLL has been compiled. So it makes sense to do inlining at run-time.

Qwertie