3

我过去曾成功使用过 VS 2010 内置的基于采样的性能分析器。有时代码窗口中突出显示的代码会偏离几行。这可能是由于代码优化,据说探查器处理得不是很好。除此之外,它对我有用(与检测变体相反)

然而,这一次的结果完全是错误的。例如,我的代码中有一行(对导致数据库查询的另一个方法的调用)占总运行时间的 40%,这是我通过“注释掉代码二分法”方法找到的。

然而,VS2012(和 VS2010,我仔细检查了)的采样分析器告诉我该方法占1%(含),即它甚至没有出现在报告摘要中,我必须搜索到详细信息的底部表找到它。为了以防万一,我提高了采样频率,但无济于事。

是什么让分析器如此遥远?

我正在分析一个基于 .net 3.5 的项目,其中包含相当数量的 dll。我尝试在“发布”和“调试”模式下进行分析。没有本质区别。

4

2 回答 2

2

您是否处于“CPU 分析”模式?在那种模式下,它将对 I/O 视而不见,我假设数据库查询将执行 I/O。

这就是为什么我依赖这种古老但出奇有效的技术。没有这样的警告。

于 2013-08-14T02:21:48.100 回答
1

谢谢迈克邓拉维,

你的答案是准确的,花在 I/O 上的时间,比如访问数据库,并没有显示在结果中。

这种洞察力让我搜索并找到了类似 Visual Studio 的这个非常棒的功能:TIP(Tier Interaction Profiler)

它列出了我所有的 SQL 查询(查询的确切文本)、它们被调用的频率、调用的数据库以及执行它们所花费的时间。它似乎可以处理其他 I/O(如 HTTP 请求)。向 MS 致敬,因为它创造了这个鲜为人知的 (?) 宝石!

在这个难得的赞美 MS 的机会之后,我不得不说探查器大部分时间都在我的应用程序上崩溃。但这是另一个故事,也许是另一个问题。

于 2013-08-14T01:28:39.983 回答