我有一段代码(.NET4 C#)应该在紧密循环中运行——其他线程通过这个循环异步向线程提供信息并处理它的命令。该代码平均足够快(100 - 200 微秒),但大约每 2 秒一次需要更多时间,通常大约 15 毫秒。
这些峰值并没有太大改变平均值,但我想找出它们发生在代码的哪些部分——我不关心平均值,而是关心最坏情况下的执行时间。是否有任何工具可以收集此类信息?我试过 dotTrace 但没有运气,它只显示平均值,我想忽略大多数情况。
总是可以选择使用秒表等编写我自己的分析器,但是在整个代码中部署这些是相当笨拙的。
注意:我知道我应该预料到一些上下文切换会导致这些峰值与繁忙循环,但代码是在专用于该应用程序的 24 核服务器上运行的。因此,我希望我能以某种方式将它们减少到最低限度。