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