Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何使用生成的IL来做出决策和寻找瓶颈?_C#_.net - Fatal编程技术网

C# 我如何使用生成的IL来做出决策和寻找瓶颈?

C# 我如何使用生成的IL来做出决策和寻找瓶颈?,c#,.net,C#,.net,如果我看一下为我的C#代码生成的il(我可以使用伟大的LINQPad工具来完成),我应该寻找什么来找出性能瓶颈 我已经阅读了《中间语言内部》一书来理解代码,但它并没有真正涵盖如何使用这些信息来做出决策和更改 谢谢检查IL有助于缩小导致意外副作用的特定代码行的范围,但对于跟踪性能瓶颈可能不太有用 我建议改用探查器。理想情况下,运行采样和跟踪分析器(如果非常重要)。一旦您在分析器中发现了瓶颈,您就可以查看IL来帮助您解决问题 然而,通常情况下,探查器的结果会突出问题,很明显需要更改的内容。如果代码不

如果我看一下为我的C#代码生成的il(我可以使用伟大的LINQPad工具来完成),我应该寻找什么来找出性能瓶颈

我已经阅读了《中间语言内部》一书来理解代码,但它并没有真正涵盖如何使用这些信息来做出决策和更改


谢谢

检查IL有助于缩小导致意外副作用的特定代码行的范围,但对于跟踪性能瓶颈可能不太有用

我建议改用探查器。理想情况下,运行采样和跟踪分析器(如果非常重要)。一旦您在分析器中发现了瓶颈,您就可以查看IL来帮助您解决问题

然而,通常情况下,探查器的结果会突出问题,很明显需要更改的内容。如果代码不明显,检查IL本身会有所帮助。我发现这唯一有用的地方是代码被多次运行(例如在一个紧密的循环中)。您可以比较两种不同的编写代码块的方法,看看哪种方法生成的IL最快/最紧凑

此外,你不能总是离开IL——有时候,JIT比看起来更简单的IL能更好地处理看起来更慢(和更长)的IL。记住,IL不是直接运行的——它是在运行之前编译(并优化)的。这是采样分析器可以提供帮助的地方,也可以自己计时


但是,查看IL有助于深入了解.net的工作原理,从长远来看,这非常有价值。

LINQPad用于分析从LINQ到SQL操作生成的SQL。您是在寻找数据库瓶颈还是代码性能瓶颈

如果要对数据库瓶颈进行故障排除,请使用LINQPad获取原始SQL查询,并使用进行检查


如果您正在寻找代码性能瓶颈,您将需要使用诸如“红门”的.NET探查器。

您好,我有ANTS,确实执行Sql查询调优。我提到LINQPAD是因为我可以很快看到IL。我正在寻找代码性能瓶颈,只是认为IL会给出一些提示(除了告诉我装箱/拆箱发生在哪里)。我很想看看IL是否能告诉我在哪里可以改进我的代码。除此之外,我通常还想了解.NET是如何工作的。