C# 将MSIL转换为存储的本机代码
这是一个非常基本的问题 JIT编译是根据MSDN的要求进行的。 每次运行汇编时,JIT编译器都会将MSIL转换为本机语言?或者当我们第一次运行汇编时,它会将本机语言代码转换并存储到某个地方C# 将MSIL转换为存储的本机代码,c#,jit,C#,Jit,这是一个非常基本的问题 JIT编译是根据MSDN的要求进行的。 每次运行汇编时,JIT编译器都会将MSIL转换为本机语言?或者当我们第一次运行汇编时,它会将本机语言代码转换并存储到某个地方 提前谢谢 JIT编译器在启动应用程序时编译代码并将其存储在内存中 此代码可以由缓存并存储在本机映像缓存中。这将在下次启动应用程序时自动加载,并且不必再次JIT MSIL代码 Ngen.exe创建本机映像(包含编译的处理器特定机器代码的文件),并将其安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机
提前谢谢 JIT编译器在启动应用程序时编译代码并将其存储在内存中 此代码可以由缓存并存储在本机映像缓存中。这将在下次启动应用程序时自动加载,并且不必再次JIT MSIL代码 Ngen.exe创建本机映像(包含编译的处理器特定机器代码的文件),并将其安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时(JIT)编译器编译原始程序集
可以在类似于
C:\Windows\assembly\NativeImages\u v4.0.30319\u 64
的路径上找到本机映像缓存。此路径无法通过Windows资源管理器访问,因此请使用cmd
或powershell。启动应用程序时,JIT编译器会编译代码并将其存储在内存中
此代码可以由缓存并存储在本机映像缓存中。这将在下次启动应用程序时自动加载,并且不必再次JIT MSIL代码
Ngen.exe创建本机映像(包含编译的处理器特定机器代码的文件),并将其安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时(JIT)编译器编译原始程序集
可以在类似于
C:\Windows\assembly\NativeImages\u v4.0.30319\u 64
的路径上找到本机映像缓存。此路径无法通过Windows资源管理器访问,因此请使用cmd
或powershell。谢谢您的回答。这是否意味着每次运行程序集时,MSIL都会通过JIT转换为本机代码?因为启动哪个应用程序需要很长时间。好吧,GAC与“本机映像缓存”不同@MatíasFidemraizer我不是100%确定,但我认为本机映像缓存要么是GAC的一部分,要么它们一起工作。通过命令行工具,您可以访问C:\Windows\assembly\GAC
上的GAC和C:\Windows\assembly\native…
上的本机映像缓存。但是,如果您通过Windows资源管理器转到C:\Windows\assembly
,一个外壳扩展将向您显示两者的内容。@dcastro顺便说一句,如果我没有错,外壳扩展已被弃用,谁知道它是否反映了GAC和图像缓存的实际状态…@user2323308否,它的意思正好相反。第一次运行程序集时,IL被编译为本机代码。NGEN将缓存本机代码,以便下次运行应用程序时可以重用。谢谢您的回答。这是否意味着每次运行程序集时,MSIL都会通过JIT转换为本机代码?因为启动哪个应用程序需要很长时间。好吧,GAC与“本机映像缓存”不同@MatíasFidemraizer我不是100%确定,但我认为本机映像缓存要么是GAC的一部分,要么它们一起工作。通过命令行工具,您可以访问C:\Windows\assembly\GAC
上的GAC和C:\Windows\assembly\native…
上的本机映像缓存。但是,如果您通过Windows资源管理器转到C:\Windows\assembly
,一个外壳扩展将向您显示两者的内容。@dcastro顺便说一句,如果我没有错,外壳扩展已被弃用,谁知道它是否反映了GAC和图像缓存的实际状态…@user2323308否,它的意思正好相反。第一次运行程序集时,IL被编译为本机代码。NGEN将缓存本机代码,以便下次运行应用程序时可以重用。