This is a JIT compiler that directs the loading of assemblies in response to translating the IL into machine code. A method type call is first translated to call a stub function. When called, this stub activates the JIT compiler to load the IL (which loads the assembly, if necessary) and translates it. Very on request.
One wrinkle in this process is the assemblies that were executed through Ngen.exe, all .NET Framework assemblies were when they were installed on the machine. This is detected when the assembly is first loaded. The JIT compiler then skips the translation step and uses the previously translated machine code as is. Although this will load all the machine code generated by the assembly, it is still on request. The term "load" is relative here, Windows uses a memory-mapped file to map its own image to virtual memory space. No actual bytes are read from the file until the code arrives on a memory page that has not yet been mapped to RAM. The technical term for this is “page error,” as seen in Taskmgr.exe.
source share