可能重复:
Is CLR loaded and initialized everytime,when a new managed application is loaded ?
当您启动某个.NET应用程序时,操作系统是否每次都必须加载.NET运行时或者已经在运行?
应用程序必须经过JIT才能在每次运行时执行它吗?
这不会减缓事情吗?这是如何运作的?
答案 0 :(得分:4)
是的,.NET运行时是按进程
重新JIT;它是按方法的,因此不需要所有进行JIT;它非常快。您可以使用NGEN(或单声道AOT)来避免这种轻微延迟。但JIT延迟很少是一个大问题。
答案 1 :(得分:2)
是的,必须将.NET运行时加载到每个新进程中,因为每个新进程都需要线程,堆,新的应用程序域等。
是的,除非它已经由ngen
编译,在这种情况下它已经被JIT了。
是的,它显着减缓了启动速度。只需在启动后运行Windows Forms程序,您就会在硬盘上看到典型的~10-20秒延迟。但是,一旦事情开始,性能是可以接受的,尽管托管代码和非托管代码之间的转换有时会成为强大的瓶颈,具体取决于代码调用平台调用调用的程度。