在.NET中如何测量多个并发线程的代码块(线程)执行时间

6

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

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

对于同步方法来说,这很好运作,但有些方法是异步执行的,因此当多个线程同时执行时,时间会错乱。是否有一种类似于System.Diagnostics.Stopwatch的东西,只会测量当前线程中花费的时间?
我们想在内部测试版本中收集数据一段时间,全天运行分析器并不可行。
编辑:澄清一下,我们只想测量执行method()所花费的时间,因此如果Method1()和Method2()同时开始,并且Method1在第2秒完成,而Method2在第4秒完成,我想要的是告诉我Method1大约花费了1秒执行,而Method2花费了大约3秒执行(假设在前两秒它们平均共享了单核处理器)。

你是在询问method()方法中处理器所占用的时间与整个经过时间之间的区别,因为其他线程正在使用CPU而method()正在执行吗?还是method()启动了一些异步操作,并且你想将该时间作为经过时间的一部分捕获? - Darryl Braaten
第一个。编辑以澄清。 - Davy8
4个回答

2

文章网址已过时。 - Bogdan M.

1
秒表应仅测量在一个线程中花费的时间。您需要在每个线程上运行一个单独的实例。这将为您提供可能最接近您想要的结果。
或者(如果您想监视整个应用程序而不仅仅是某些方法,则首选此选项),您可以使用各种性能计数器(它们由.Net运行时更新)。网络上有大量信息,您可以从msdn开始: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx

秒表测量的是实际经过的时间,可能并非花费在当前线程执行的时间。我们为每个线程创建一个新的实例,但它并不满足我们的需求。 - Davy8

1

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

另外,您可以购买Ants Profiler等工具来帮助您。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接