现在我们只使用这样的东西
stopWatch.Start();
try
{
method();
}
finally
{
stopWatch.Stop();
}
哪种方法适用于同步方法,但有些方法是异步执行的,因此在执行多个线程时时间会有所偏差。是否有相当于System.Diagnostics.Stopwatch,它只会测量当前线程的时间花费?
我们希望在内部测试版(alpha?)版本中长时间收集数据,并且在分析器的全时运行不是一个可行的选择。
编辑:为了澄清,我们只想测量执行method()所花费的时间,所以如果Method1()和Method2()都同时启动而Method1在2秒标记处完成,而Method2在4处完成第二个标记,我想要一些能告诉我Method1花费大约1秒执行而Method2花费大约3秒执行的东西(假设在前2秒内他们平均共享(假定的单核)处理器。
答案 0 :(得分:2)
Timing a line of code accurately in a threaded application, C#
还有这篇文章:
似乎没有简单的方法可以做到这一点。
答案 1 :(得分:1)
秒表应测量仅在一个线程中花费的时间。您需要在每个线程上运行单独的实例。这可能会让你得到你想要的结果。
或者(如果要监视整个应用程序而不仅仅是某些方法,则首选选项),可以使用开箱即用的各种性能计数器(它们由.Net运行时更新)。网上有很多信息,你可以从msdn开始: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx
答案 2 :(得分:1)
我曾经通过为StopWatch创建一个包装器来解决类似问题,该包装器的StopWatch实例标记为ThreadStatic
。
另外,您可以购买Ants Profiler等工具来帮助您。
答案 3 :(得分:0)