检测JIT优化或错过的优化

时间:2011-11-10 09:18:06

标签: c# .net clr jit micro-optimization

.NET CLR JIT将;根据我的理解;尝试使用方法内联循环展开等模式优化代码...在方法内联的情况下,由于以下原因,不会执行此操作:

  • 不会内联大于32字节IL的方法。
  • 虚拟函数未内联。
  • 具有复杂流量控制的方法不会内联。复杂流量控制是除if / then / else之外的任何流量控制;在这种情况下,切换或while。
  • 不会内联包含异常处理块的方法,但抛出异常的方法仍然是内联的候选方法。
  • 如果方法的任何形式参数都是结构体,则不会内联该方法。
  • 等等...

我的问题是......有没有办法检测JIT优化过程因这些或其他原因而决定跳过的内容?

我的想法是,我想知道可能需要重构哪些代码区域以确保我可以利用JIT优化。

1 个答案:

答案 0 :(得分:0)

现在,您可以在自己的set COMPLUS_JitDump版本上运行应用程序,并收集所需的所有统计信息。您可以检查clrconfigvalues.h并启用您想要获取任何相关信息的任何标志(例如JitDump,在命令提示符中使用{{1}}命令)

这不容易,但有可能。