我想知道是否有任何方法可以通过指定更深入优化的首选项来改变 .NET JIT 编译器的行为。如果做不到这一点,如果它还没有做某种配置文件引导的优化,那就太好了。
omellet
问问题
1906 次
1 回答
20
这是在编译程序集时设置的。有两种类型的优化:
- IL优化
- JIT 本机代码质量。
默认设置是这个
/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 将为所有平台编译,并且不会利用任何技巧。
于 2008-09-19T01:29:27.113 回答