2008-12-17 54 views
5

多个并发线程现在,我们只需要使用这样的事情你如何衡量代码块(线程)的执行时间与.NET

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

,工作正常进行的同步方法,但也有一些异步执行,所以当多个线程正在执行时,时间会偏斜。是否有与System.Diagnostics.Stopwatch相当的功能,将只测量当前线程中的时间花费?

我们希望随着时间在我们的内部测试版长一段时间(阿尔法?)发布收集数据和一个剖析全职下运行是不是一个可行的选择。为了澄清,我们只想测量执行method()所花费的时间,所以如果Method1()和Method2()都在同一时间开始并且Method1在2秒标记处结束,并且Method2在我想要的东西会告诉我Method1花了大约1秒的时间执行,Method2花了大约3秒的时间执行(假设他们在前2秒内平均分享(假定的单核)处理器

+0

你是问在方法()对整个经过的时间花在处理器时间,因为在()的方法正在执行其他线程所使用的CPU?或者是方法()启动一些异步的东西,你想捕获时间的一部分经过的时间? – 2008-12-17 16:55:39

+0

第一个。编辑澄清 – Davy8 2008-12-17 17:17:24

回答

1

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

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

+0

秒表测量实时过去可能不应该用在当前线程执行。我们为每个线程创建一个新实例,但它没有得到我们想要的。 – Davy8 2008-12-17 16:59:45

1

我曾经创造了秒表包装,有标记为ThreadStatic秒表实例解决了类似的问题。

或者有蚂蚁探查器这样的工具,你可以购买,以帮助您。