我想知道是否有任何方法可以通过指定更深入优化的首选项来更改.NET JIT编译器的行为。如果不这样做,如果它可以进行某种配置文件引导的优化,如果它还没有,那就太好了。
答案 0 :(得分:20)
编译程序集时设置此项。有两种类型的优化:
默认设置为此
/optimize- /debug-
这意味着未经优化的IL和优化的本机代码。
/optimize /debug(+/full/pdbonly)
这意味着未经优化的IL和未经优化的本机代码(最佳调试设置)。
最后,要获得最快的表现:
/optimize+ /debug(-/+/full/pdbonly)
这会产生优化的IL和优化的本机代码。
在生成未经优化的IL时,编译器将在整个代码中插入NOP指令。这使代码更容易调试,允许在控制流指令上设置断点,例如for,while,if,else,try,catch等。
无论如何,CLR在优化代码方面做得非常出色。一旦方法被JIT控制,调用上的指针或callvirt指令就直接指向本机代码。
此外,CLR将利用JIT代码时可用的任何架构技巧。这意味着通过JIT运行的程序集将比使用Ngen预编译的程序集运行得更快(尽管启动时间稍慢),因为NGen将为所有平台编译,而不是利用任何技巧。