IL (Intermediate code) is compiled into processor commands (
0001 0011 1101… ). This is done by the
JIT compiler in the
CLR environment.
Instead of compiling the entire application, the
JIT (Just-In-Time) compiler simply compiles each piece of code when called. Once the intermediate code is compiled, the resulting native executable code persists until the application is terminated, so it does not need to be recompiled when it is accessed again.
In Microsoft argue that such a process is more efficient than compiling the entire application at startup, since there is a high probability that large chunks of application code will not actually be executed on every startup.