如果我查看为我的C#代码生成的il(我可以使用优秀的LINQPad工具执行此操作),我应该寻找什么来找出可能是性能瓶颈?
我已经阅读了"内部中间语言"这本书来理解代码,但它并没有真正涵盖如何使用这些信息来做出决策,从而改变.
谢谢
检查IL有助于缩小哪些特定代码行导致意外的副作用,但对于追踪性能瓶颈可能不太有用.
我建议为此目的使用分析器.理想情况下,运行采样和跟踪分析器(如果它非常重要).一旦您在分析器中找到了瓶颈,您就可以查看IL来帮助您解决问题.
然而,通常情况下,分析器结果会突出显示问题,而且需要更改的内容相当明显.如果代码不明显,检查IL本身可能会有所帮助.我发现这个有用的唯一地方是代码被运行多次(例如,在紧密的循环中).您可以比较两种不同的方法来编写代码块,并查看哪种方法可以产生最快/最紧凑的IL.
此外,你不能总是脱离IL - 有时候,JIT可以更好地处理看起来更慢(和更长)的IL,而不是简单的IL.请记住,IL不是直接运行的 - 它在运行之前已经过编译(和优化).这是采样分析器可以帮助或做自己的时间的地方.
但是,查看IL非常适合深入了解.net如何工作,从长远来看这非常有价值.