并行调用会减慢分析器的速度吗?
Posted
技术标签:
【中文标题】并行调用会减慢分析器的速度吗?【英文标题】:Can parallel calls slow down a profiler? 【发布时间】:2012-07-20 13:14:06 【问题描述】:我的任务是找出导致分配给我的应用程序如此缓慢的部分原因。我决定试一试 Redgate 的 Ants Profiler。运行它时,大多数热点都包含在原始开发人员编写为Parallel.For()
循环的循环中。
为了看看它会产生什么效果,我用标准的 for 循环替换了它们,分析器加速了几秒钟。但是,在没有分析器的情况下进行测试,使用一个此类循环的开始和结束之间的简单DateTime.Now
差异,表明Parallel.For()
循环的速度是原来的两倍多。
在尝试使用 Parallel 类时,通过分析器运行代码是否会造成人为的瓶颈?
【问题讨论】:
分析器的主要目的是发现缓慢的错误,而不是快速。 @MikeDunlavey 我意识到了这一点。问题是程序在使用分析器时运行得更快,而在没有分析器的情况下运行得更慢,这会产生取决于正在使用的工具而不是代码本身的瓶颈的差异。这就像一个误报。 【参考方案1】:问题在于,在执行并行操作时,分析器会对所有线程进行采样,这使得正常的分析器性能下降幅度更大。
【讨论】:
给我的消息。将来查看分析器结果时,我会牢记这一点。谢谢! @KChaloux 您可能还想确保使用侵入性较小的分析模式:如果您不一定需要查看行级时间,则切换到方法级;如果你只需要查看你的源代码,那么也设置适当的分析模式。以上是关于并行调用会减慢分析器的速度吗?的主要内容,如果未能解决你的问题,请参考以下文章
Java 的 Profiler [几乎] 不会减慢分析代码的速度