When you compile C# code it is compiled to Intermediate Language (IL). When the Common Language Runtime executes IL it uses a Just In Time (JIT) compiler to compile the IL to machine instructions.
Here is some C# sample code:
using System;
using System.Diagnostics;
static class Program
{
static void Main() { Person me = new Person("Dave"); Console.ReadKey(); }
}
class Person
{
public Person(string name) { Name = name; }
private void SetName(string name)
{
Console.WriteLine(new StackTrace().GetFrame(1).GetMethod().Name);
}
public string Name
{
set { SetName(value); }
}
}
Copy that code into notepad and save it as Program.cs.
From a Visual Studio command prompt type these lines.
csc /out:d.exe Program.cs /optimize- /debug+
csc /out:u.exe Program.cs /optimize- /debug-
csc /out:o.exe Program.cs /optimize+ /debug-
Then execute the programs:
d outputs set_None
u outputs .ctor
o outputs Main
Kinda crazy huh?
PS. if you run this program from Visual Studio it will output set_None because you run with a debugger attached and the JIT Compiler won't inline. If you compile in Release mode and run without the debugger (ctrl+F5) you can see Main if you are fast enough ;)
No comments:
Post a Comment