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