如何在VS2008/10中对特定代码块进行性能分析?

4

我完全不了解剖析的概念,有没有人能给我简单的步骤,告诉我如何对特定函数进行剖析?

这两个函数都是做同样的事情,但一个是在vs2008中的C#,另一个是在vs2010中的C++。我主要关心的是C++函数,因为它运行得非常缓慢,我想找出原因所在。谢谢。

2个回答

3

我将介绍一下如何对特定函数进行剖析的简单步骤

我使用的方法是随机暂停,也许更为人所知的是穷人的剖析器(我很喜欢它,直到我看到他们的聚合方式)。 这里有另一个链接。 你不需要告诉它要查看哪个特定函数。 它会自动找到最耗时的内容,无论是该函数还是其他函数。

关于它的事情是,与“真正”的剖析器相比,有些人可能会说它很粗糙,乏味等等。 那么为什么要这样做?

因为它是有效的

你可以将问题钉定到具体的指令,并在开始研究大量来自大多数分析器的内容之前就知道需要修复什么,这些内容包括:自我时间、调用次数、调用树、调用图、“热路径”、“CPU时间”等等。任何分析器的要求不在于其“准确性”,而在于在真实(而非玩具)程序中使用它通常可以实现多少加速?这难道不是您关心的吗?这里有一个例子,使用随机暂停技术达到了43倍的加速效果。

1

这里有一个想法。编写一个测试应用程序,反复调用此函数,并尽可能少地执行其他操作。然后创建两个可执行文件,分别包含两个版本的函数。现在,在这两个可执行文件上运行Very Sleepy分析器,并比较结果。分析器将显示每个函数的慢速部分。

另一个你可能会觉得有用的分析器是Shiny。它以完全不同的方式工作。您必须在要进行分析的函数或代码部分中插入调用,然后编译特殊的启用了分析器的应用程序版本。


你能否不对程序中的特定位进行分析,而是总是需要创建一个只包含感兴趣部分的小程序? - Dollarslice
这个特定的配置文件不需要对您的应用程序进行仪器化,它只是在本地运行时对应用程序进行配置文件。因此,它将对整个应用程序进行配置文件。还有其他需要您对代码进行仪器化的分析工具,对于这些工具,您只能对应用程序中的一个函数进行分析。我正在更新我的答案,并提供另一个需要仪器化的分析工具的链接。 - Miguel Grinberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接