2010-09-22 49 views
6

我的程序的某些部分速度很慢。我想知道是否有我可以使用的工具,例如它可以告诉我确定运行methodA()花了100毫秒,等等...或类似的有用信息。任何说明每种方法运行需要多长时间的工具?

+3

它被称为[Profiler](http://stackoverflow.com/search?q= [c%23] + profiler)。 – dtb 2010-09-22 20:46:42

+1

你在找什么叫做分析器。 – GrandmasterB 2010-09-22 20:46:50

+2

可能的重复[什么是一些好的.NET分析器?](http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb 2010-09-22 20:47:05

回答

8

System.Diagnostics命名空间提供了一个名为Stopwatch一个有用的类,它可用于代码的时间部分(认为它是一个“穷人的仿形”)。

这是你将如何使用它:

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); // Start timing 

// This is what we want to time 
DoSomethingWeSuspectIsSlow(); 

stopwatch.Stop(); 
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds); 
+3

或者,创建一个实现idisposable的类,它在构造时启动定时器,在处置时停止和写入。然后你可以通过用using语句包装它来计时任何代码块! – 2010-09-22 21:02:34

+1

还要确保在计时之前至少调用了该方法一次,以便您不测量JIT编译的时间。 – 2010-09-22 21:05:06

+0

@John Gardner - 你的构造对于从正在运行的Prod系统中获得执行时间也非常有用。使用标识它们的标签累积工作项目部分的时间,并在工作项目结尾处倾倒。 – 2010-09-22 21:05:13

3

这些类型的应用被称为“探查”

这里有一个例子:example

12

如果您使用Visual Studio Team System中存在“性能工具”一个内置的分析器。这里有很多有用的背景,this blog

我发现这在识别20% of my code that runs 80% of the time时非常有用,因此我应该担心优化。

另一个令人惊讶的有效的简单技术是在调试器中运行你的发布代码,并且在你正试图诊断的“繁忙”状态下中断它几次(大约10次就足够了) 。您可能会发现经常性的调用堆栈信息,这些信息会将您引导至常见的关注区域。 80/20规则也是有效的。

+1

+1我一直在使用该中断方法因为在配置文件被构思之前。我很困惑,很少有人知道它。我想说它实际上确定了所关注的领域,而80/20规则更像99.9/0.1 – 2010-09-23 01:58:02

+0

不幸的是,80/20链接是特别真实的。 – 2010-09-23 12:38:05

+0

@Mike Dunlavey--你有更好的吗?如果是的话,我会编辑。谢谢 – 2010-09-23 13:00:52

2

见我们SD C# Profiler。它可以自己和/或其所有被调用者提供该功能的功能定时。

相关问题