Visual Studio 性能探查器中的错误结果

Posted

技术标签:

【中文标题】Visual Studio 性能探查器中的错误结果【英文标题】:Wrong results in Visual Studio Performance Profiler 【发布时间】:2013-08-13 09:19:37 【问题描述】:

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

但是,这一次的结果完全是错误的。例如,我的代码中有一行(对导致数据库查询的另一个方法的调用)占总运行时间的 40%,我在“评论出代码二等分”方法。

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

什么能让分析器离我们这么远?

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

【问题讨论】:

这是我读到的:“我使用分析器找到了一行代码,如预期的那样占用了 40%。我把它注释掉了,现在它占用了 1%”。嗯,当然。 @HansPassant 好吧,那么这个问题根本没有任何意义。除了突出显示错误的行之外,分析器根本不会显示注释掉的行。我编辑了问题以澄清:分析器没有找到那行慢代码,我通过其他方式找到它。 【参考方案1】:

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

这就是我依赖this old but surprisingly effective technique 的原因。 没有这样的警告。

【讨论】:

【参考方案2】:

感谢迈克邓拉维,

您的答案是accurate,花在 I/O 上的时间(例如访问数据库)不会显示在结果中。

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

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

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

【讨论】:

哇,这是一个了不起的发现。我不知道这存在 - 谢谢!

以上是关于Visual Studio 性能探查器中的错误结果的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015 探查器未显示我的代码中的任何内容

在 Visual Studio 中调试时启用内存使用情况中的实时图表

Visual Studio 中的错误结果

如何停止 Visual Studio 为设计器中的控件生成属性设置?

Visual Studio:如何通过依赖关系安排解决方案资源管理器中的项目

使用 Visual Studio 2012 将键盘快捷键附加到解决方案资源管理器中的“全部折叠”项目