2014-05-06 33 views
1

它的基本问题。MSIL存储为本地代码

JIT编译按照MSDN MSIL To Native Code的要求进行。 每当我们运行程序集JIT编译器将MSIL转换为Native语言时?或者当我们第一次运行程序集时,它会将本地语言代码转换并存储到某个地方?

提前致谢!

回答

6

当您启动应用程序并将其存储在内存中时,JIT编译器会编译您的代码。

此代码可以通过ngen.exe (Native Image Generator)被高速缓存并存储在机映像缓存。这将在您下次启动应用程序时自动加载,而且您不必再次尝试MSIL代码。

Ngen.exe创建原生映像,这些映像是包含已编译处理器的机器代码的文件,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时(JIT)编译器来编译原始程序集。

可以在类似于C:\Windows\assembly\NativeImages_v4.0.30319_64的路径上找到本机图像缓存。此路径无法通过Windows资源管理器访问,因此请使用cmd或PowerShell。

+0

感谢您的回答。这是否意味着每次我们运行程序集时,JIT都将MSIL转换为本机代码?因为哪个应用程序需要很长时间才能启动。 – user2323308

+0

好吧,GAC与“原生图像缓存”不一样 –

+0

@MatíasFidemraizer我不是100%确定,但我认为原生图像缓存既可以是GAC的一部分,也可以一起工作。通过命令行工具,您可以在'C:\ Windows \ assembly \ GAC'和'C:\ Windows \ assembly \ Native ...'上的本机图像缓存中访问GAC。但是,如果您通过Windows资源管理器转到“C:\ Windows \ assembly”,一个外壳扩展将向您显示两者的内容。 – dcastro