13
我想知道是否有任何方法来改变.NET JIT编译器的行为,方法是指定一个用于更深入优化的首选项。否则,如果它可以进行某种简档引导的优化,如果它尚未完成,那将会很好。有什么办法可以改变.NET JIT编译器的性能,而不是编译时间?
我想知道是否有任何方法来改变.NET JIT编译器的行为,方法是指定一个用于更深入优化的首选项。否则,如果它可以进行某种简档引导的优化,如果它尚未完成,那将会很好。有什么办法可以改变.NET JIT编译器的性能,而不是编译时间?
这是在编译程序集时设置的。有两种类型的优化:
默认设置为这个
/optimize- /debug-
这意味着未优化IL,和优化的本机代码。
/optimize /debug(+/full/pdbonly)
这意味着未优化的IL和未优化的本机代码(最佳调试设置)。
最后,为了获得最快的性能:
/optimize+ /debug(-/+/full/pdbonly)
这将产生优化的IL和优化的本地代码。
当生成未优化的IL时,编译器将在整个代码中插入NOP指令。这使代码更容易调试,允许在控制流程指令上设置断点,例如for,while,else,try,catch等。
CLR在优化代码方面做得非常好,无论如何。一旦某个方法被JIT化,一个call或callvirt指令上的指针直接指向本地代码。
此外,CLR将利用可用的任何架构技巧来获得您的代码。这意味着通过JIT运行的程序集运行速度比使用Ngen预编译的程序集运行速度快(尽管启动时间稍微慢一点),因为NGen将针对所有平台进行编译,而不会利用任何技巧。
+1不错。您在IDE中确切地设置了这些值? – Trap 2010-02-12 16:53:15