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 为设计器中的控件生成属性设置?