并行调用会减慢分析器的速度吗?

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 [几乎] 不会减慢分析代码的速度

如何在不减慢执行速度的情况下分析 Android 应用程序的执行?

非聚集索引会减慢插入速度吗?

额外的空间会减慢处理器的速度吗?

过度注释代码会减慢执行速度吗? [复制]

条件语句会减慢着色器的速度吗?