MSIL is Microsoft Intermediate Language. When the .NET program is compiled by the compiler, the source code is converted into the Intermediate Language (MSIL).
From MSIL, the code is later compiled into the machine code. This is done by Just-In Time Complier (JIT). The .NET framework is built in such a way that the code that is to be executed is Just-In time complied, which means that it gets complied when it is called rather than compilling the entire code at the start up (ahead of time).
A portion of the code gets complied only once and it exists untill the application terminates. This has a significant improvement in performance since only the code that is needed is compiled and the rest of the code is not completed at all (unless it is executed).