只是想知道.NET应用程序是否可以提前编译为本机代码?即使我可以,我也不打算这样做; 我只是好奇.
谢谢
您可以使用NGen提前编译它,但这仍然取决于.NET框架.Remotesoft的Salamander(一个商业应用程序)可以制作一个无框架的应用程序.
您可以将IL编译为本机二进制文件.有产品可以做到这一点.
更大的问题是你应该......
如果要删除所有dot net依赖项,以便在没有dot net的情况下运行
基本上这些产品正在做的是预编译到机器级别(通常是x86),然后静态地包含exe中所有必需的库.这通常导致巨大的exe.而且,更重要的是,您现在并没有真正拥有目标计算机上的运行时.您拥有本机编译器选择合并的运行时的一部分.
如果你想获得更快的JIT时间
您也可以使用NGen将其编译为本机二进制文件,但您仍然拥有dot net的所有依赖项.目标机器仍然需要框架等.
但是,当你发现你失去了应用程序自动提升高达64位的能力.如果您的应用程序已预编译,则必须强制使用一种模式.如果用户在64位计算机上运行,则您的IL代码将被提升(除非您不将其标记).
JIT时间不是大多数应用程序中最大的瓶颈.它是框架库的加载和其他相关要求.
如果您真的需要它,您可以在安装应用程序中获取当前用户目标计算机.
我最近才知道你不能NGEN一个应用程序,并期望它像你可以使用JIT一样利用CPU.当你运行NGEN时总是出于某种原因优化PentiumPro的输出,并且不会利用像SSE,SSE2等的东西.所以我想说将NGEN作为一个合理的使用案例.