如何使用.NET中的多个并发线程来衡量代码块(线程)执行时间

现在我们只是使用这样的东西

stopWatch.Start(); try { method(); } finally { stopWatch.Stop(); } 

哪种方法适用于同步方法,但有些方法是异步执行的,因此在执行多个线程时时间会有所偏差。 是否有相当于System.Diagnostics.Stopwatch,它只测量当前线程的时间花费?

我们希望在我们的内部beta(alpha?)版本中长时间收集数据,并且在分析器全时运行不是一个可行的选择。

编辑:为了澄清,我们只想测量执行method()所花费的时间,所以如果Method1()和Method2()都同时启动而Method1在2秒标记处完成,而Method2在4秒标记处完成,我想要的东西可以告诉我,Method1花了大约1秒钟执行,而Method2花了大约3秒钟执行(假设在前2秒内他们平均共享(假设单核)处理器。

嗯,来自Jon Skeet对这个问题的回答:

在线程应用程序中准确定位一行代码,C#

还有这篇文章:

http://lyon-smith.org/blogs/code-o-rama/archive/2007/07/17/timing-code-on-windows-with-the-rdtsc-instruction.aspx

似乎没有简单的方法可以做到这一点。

秒表应该只测量在一个线程中花费的时间。 您需要在每个线程上运行单独的实例。 这可能会让你得到你想要的结果。

或者(如果您想监视整个应用程序而不仅仅是某些方法,则首选选项),您可以使用各种性能计数器(它们由.Net运行时更新)。 网上有很多信息,你可以从msdn开始: http : //msdn.microsoft.com/en-us/library/w8f5kw2e( VS.71) .aspx

我曾经通过为StopWatch创建一个包装器来解决类似问题,该包装器的StopWatch实例标记为ThreadStatic

或者,您可以购买Ants Profiler等工具来帮助您。

这是一个很酷的工具: http : //technet.microsoft.com/en-us/sysinternals/bb896647.aspx