有什么方法可以更改.NET JIT编译器以在编译时偏爱性能吗?

有什么方法可以更改.NET JIT编译器以在编译时偏爱性能吗?

Is there any way to change the .NET JIT compiler to favor performance over compile time?

我想知道是否有办法通过指定更深入的优化的首选项来更改.NET JIT编译器的行为。 失败的话,如果它还可以进行某种配置文件引导的优化,那将是很好的。


在编译程序集时设置。有两种类型的优化:

  • IL优化
  • JIT本机代码质量。

默认设置是这个

1
 /optimize- /debug-

这意味着未优化的IL和优化的本机代码。

1
 /optimize /debug(+/full/pdbonly)

这意味着未优化的IL和未优化的本机代码(最佳调试设置)。

最后,要获得最快的性能:

1
/optimize+ /debug(-/+/full/pdbonly)

这将产生优化的IL和优化的本机代码。

生成未优化的IL时,编译器将在代码中插入NOP指令。通过允许在控制流指令上设置断点,例如for,if,else,try,catch等,这使得代码更易于调试。

无论如何,CLR在优化代码方面都表现出色。一旦对方法进行JIT处理,调用或callvirt指令上的指针将直接指向本机代码。

另外,CLT将在JIT代码时利用任何可用的体系结构技巧。这意味着通过JIT运行的程序集将比使用Ngen预编译的程序集运行速度更快(尽管启动时间稍慢),因为NGen可以针对所有平台进行编译,并且不会利用任何技巧。


推荐阅读