"PRE-JIT" is done through NGen (the process of pre-compiling from CIL for your own image). It converts compiled .NET code from a platform-independent middleware state to a platform-specific stage. In plain English, it converts a .NET application that can run on both Windows, Mac, and Linux 32-bit and 64-bit versions into an EXE file that can only work on one of them.
.NET applications are compiled into the intermediate binary format MSIL , which is platform independent. This means that the application can run on any processor on any platform, if the platform supports .NET. What .NET does at runtime is called JIT. JIT will compile the code once per execution before actually using it. It also means that only used code will be compiled.
NGen will give your application a performance boost (mostly launch time), sometimes very noticeable. Everything is safe for NGen as long as you are guided by the correct platform. For example, if your application uses 32-bit DLL files, you should not bind it to 64-bit, and if your DLL file is used by other applications, you should not use it.
I would recommend starting NGen after installation, and not before distribution, so that you know that the application will run on the target computer.
source share