.NET应用程序可以编译为本机吗?

时间:2008-10-10 00:55:14

标签: .net native compilation machine-code

想知道.NET应用程序是否可以提前编译为本机代码?即使我可以,我也不打算这样做;我只是好奇。

由于

4 个答案:

答案 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