1

我有一段代码(.NET4 C#)应该在紧密循环中运行——其他线程通过这个循环异步向线程提供信息并处理它的命令。该代码平均足够快(100 - 200 微秒),但大约每 2 秒一次需要更多时间,通常大约 15 毫秒。

这些峰值并没有太大改变平均值,但我想找出它们发生在代码的哪些部分——我不关心平均值,而是关心最坏情况下的执行时间。是否有任何工具可以收集此类信息?我试过 dotTrace 但没有运气,它只显示平均值,我想忽略大多数情况。

总是可以选择使用秒表等编写我自己的分析器,但是在整个代码中部署这些是相当笨拙的。

注意:我知道我应该预料到一些上下文切换会导致这些峰值与繁忙循环,但代码是在专用于该应用程序的 24 核服务器上运行的。因此,我希望我能以某种方式将它们减少到最低限度。

4

1 回答 1

0

你也试过ANTS吗?链接:http ://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ 它为您提供的数字是所选区域的平均值。但是,当您选择堆栈跟踪时,时间线视图顶部显示的绿色条会显示该堆栈视图的执行位置;因此您可以单击每一个并查看堆栈每次执行的数字(时序等)。这需要一些手动比较,但这是可能的。

不确定您尝试的探查器是否有类似的东西,YourKits 也是另一个流行的探查器,我也不知道它是否提供类似的东西。

于 2012-05-07T12:38:09.777 回答