GAC 中的 .Net Framework Class 库是否每次都编译为本机代码?还是直接从 Native Image Directory 加载?
Does .Net Framework Class libraries in GAC compile each time to Native Code ? Or will it load directly from Native Image Directory ?
我一直在阅读《通过 C# 实现 CLR》一书,并在其中通过使用 NGen.exe 了解到我可以将我的程序集编译为本机映像。这提高了性能。然而,本机代码是根据我的架构定制的。
当我打开本机图像目录时
C:\Windows\assembly\NativeImages_v4.0.30319_64\System\d6591361d8701ff6eb6a9df223c24684
我找到了所有内置 .net 框架 class 库的本机图像。
所以我的问题是当我们的应用程序引用一个时,内存中的这个Native Images会直接使用吗?
并且 .net 框架安装程序也会生成这些 class 库的本机映像,这些库充分利用了 CPU 体系结构。
提前致谢!!!
是的,框架库没有 jitted。它们将从本机图像缓存中加载。
您可以通过检查加载的程序集路径自行验证这一点。 process explorer 等工具可用于查看进程加载的程序集。
例如:在我的机器上 mscorlib 恰好是从
加载的
C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\blahblahblah\mscorlib.ni.dll
And also does .net framework installer produce the Native images of
these class libraries that take full advantage of CPU architecture.
不确定你的意思。安装程序在这里什么都不做。 ngen.exe 创建了原生图像。所以,是的,它将生成最适合 cpu 机器架构的机器代码。
我一直在阅读《通过 C# 实现 CLR》一书,并在其中通过使用 NGen.exe 了解到我可以将我的程序集编译为本机映像。这提高了性能。然而,本机代码是根据我的架构定制的。
当我打开本机图像目录时
C:\Windows\assembly\NativeImages_v4.0.30319_64\System\d6591361d8701ff6eb6a9df223c24684
我找到了所有内置 .net 框架 class 库的本机图像。
所以我的问题是当我们的应用程序引用一个时,内存中的这个Native Images会直接使用吗?
并且 .net 框架安装程序也会生成这些 class 库的本机映像,这些库充分利用了 CPU 体系结构。
提前致谢!!!
是的,框架库没有 jitted。它们将从本机图像缓存中加载。
您可以通过检查加载的程序集路径自行验证这一点。 process explorer 等工具可用于查看进程加载的程序集。
例如:在我的机器上 mscorlib 恰好是从
加载的C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\blahblahblah\mscorlib.ni.dll
And also does .net framework installer produce the Native images of these class libraries that take full advantage of CPU architecture.
不确定你的意思。安装程序在这里什么都不做。 ngen.exe 创建了原生图像。所以,是的,它将生成最适合 cpu 机器架构的机器代码。