6

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

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

这对于同步方法很有效,但有些是异步执行的,因此在执行多个线程时时间会出现偏差。是否有与 System.Diagnostics.Stopwatch 等效的仅测量当前线程中花费的时间?

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

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

4

4 回答 4

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

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

于 2008-12-17T17:06:19.630 回答
1

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

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

于 2008-12-17T16:38:13.790 回答
1

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

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

于 2008-12-17T16:50:57.103 回答
0

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

于 2009-10-16T09:58:50.120 回答