我有一段应该在紧密循环中运行的代码(.NET4 C#) - 其他线程使用此循环异步地向线程提供信息并处理它的命令。代码平均足够快(100 - 200微秒),但大约每2秒一次需要更多,通常大约15ms。
这些峰值并没有太大改变平均值,但我想找到它们发生在哪些代码部分 - 我不关心平均值,而是关注最坏情况下的执行时间。有没有工具来收集这些信息?我试过dotTrace,但没有运气,它只显示平均值,我想忽略大多数情况。
总是可以选择使用秒表等编写我自己的探查器,但在整个代码中部署这些探测器是相当笨拙的。
注意:我知道我应该期待一些上下文切换导致这些峰值出现繁忙的循环,但代码是在专用于此应用程序的24核服务器上运行的。因此,我希望我能以某种方式将它们减少到最低限度。
答案 0 :(得分:0)
你也尝试过ANTS吗?链接:http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ 它给出的数字是选定区域的平均值。但是,当您选择堆栈跟踪时,时间线视图顶部显示的绿色条显示执行堆栈视图的位置;所以你可以点击每一个并查看每次执行堆栈的数字(时间等)。 它需要一些手动比较,但它是可能的。
不确定您尝试的探查器是否有类似的东西,YourKits也是另一种流行的探查器,我再也不知道它是否提供类似的东西。