每次加载新的托管应用程序并且托管应用程序已经存在时,是否每次都加载并初始化CLR?
e.g。如果在我的机器上,应用程序“TestApp”正在运行,之后我启动另一个应用程序“DemoApp”。在这种情况下,为RemoApp再次加载wiill CLR?或者它将使用由TestApp加载的同一个?
答案 0 :(得分:8)
是的,程序集是JIT编译的,堆是分配的,等等。 Windows映像加载器会有所帮助,但一般来说CLR开销是按进程进行的。
答案 1 :(得分:4)
每次都没有完全加载CLR。下面链接的文章提到了CLR准备就绪时的“热启动”场景。当您在系统启动后第一次启动.NET应用程序时,您可能已经注意到了这一点。
在热启动方案中(例如,您已经运行过一次托管应用程序),主公共语言运行库(CLR)组件的大多数页面可能已经加载到操作系统所在的内存中重用它们,节省了昂贵的磁盘访问时间。这就是托管应用程序在第二次运行时启动速度快得多的原因。这些软故障主导着温暖的启动。