我的程序的某些部分速度很慢。我想知道是否有我可以使用的工具,例如它可以告诉我确定运行methodA()花了100毫秒,等等...或类似的有用信息。任何说明每种方法运行需要多长时间的工具?
回答
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);
或者,创建一个实现idisposable的类,它在构造时启动定时器,在处置时停止和写入。然后你可以通过用using语句包装它来计时任何代码块! – 2010-09-22 21:02:34
还要确保在计时之前至少调用了该方法一次,以便您不测量JIT编译的时间。 – 2010-09-22 21:05:06
@John Gardner - 你的构造对于从正在运行的Prod系统中获得执行时间也非常有用。使用标识它们的标签累积工作项目部分的时间,并在工作项目结尾处倾倒。 – 2010-09-22 21:05:13
这些类型的应用被称为“探查”
这里有一个例子:example
如果您使用Visual Studio Team System中存在“性能工具”一个内置的分析器。这里有很多有用的背景,this blog。
我发现这在识别20% of my code that runs 80% of the time时非常有用,因此我应该担心优化。
另一个令人惊讶的有效的简单技术是在调试器中运行你的发布代码,并且在你正试图诊断的“繁忙”状态下中断它几次(大约10次就足够了) 。您可能会发现经常性的调用堆栈信息,这些信息会将您引导至常见的关注区域。 80/20规则也是有效的。
+1我一直在使用该中断方法因为在配置文件被构思之前。我很困惑,很少有人知道它。我想说它实际上确定了所关注的领域,而80/20规则更像99.9/0.1 – 2010-09-23 01:58:02
不幸的是,80/20链接是特别真实的。 – 2010-09-23 12:38:05
@Mike Dunlavey--你有更好的吗?如果是的话,我会编辑。谢谢 – 2010-09-23 13:00:52
见我们SD C# Profiler。它可以自己和/或其所有被调用者提供该功能的功能定时。
- 1. 分析C#中的方法知道需要多长时间运行
- 2. GC需要多长时间?
- 3. 执行循环需要多长时间?
- 4. CreateThread需要执行多长时间?
- 5. 执行脚本需要多长时间?
- 6. 我的代码需要多长时间才能运行?
- 7. Firebase getCurrentUser方法需要说明
- 8. tablediff工具需要很长时间才能执行
- 9. 每种方法应该运行多少种测试方法?
- 10. 如何找出我的任务需要多长时间
- 11. 如何让长时间运行的@Scheduled spring方法,hibernate工作?
- 12. 什么是显示命令行操作需要多长时间的最佳方法或工具?
- 13. 是否可以预测程序运行需要多长时间?
- 14. 显示查询需要在SQL Server中运行多长时间
- 15. 使用RxJava(ReactiveX)运行Observable需要多长时间?
- 16. 在asp.net中运行web服务需要多长时间
- 17. 需要对通过我的方法的'this'进行说明
- 18. 渐近最差情况下的运行时间。需要一些说明
- 19. 在Python中,确定每行代码需要执行多长时间的最佳方法是什么?
- 20. visual studio 2012需要很长时间才能第一次运行任何项目
- 21. ASP SaveToDisk方法需要很多时间
- 22. 提取行比运行查询需要更长的时间
- 23. 适当的方法来计时排序算法需要多长时间
- 24. 需要说明,请
- 25. CustomTaskPanes需要说明
- 26. 需要说明java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener
- 27. 需要对值类型方法进行说明
- 28. 我如何时间多长时间的事情需要在android
- 29. 每次执行NSURLSessionTask需要比其他更长的时间
- 30. 处理长时间运行的任务
它被称为[Profiler](http://stackoverflow.com/search?q= [c%23] + profiler)。 – dtb 2010-09-22 20:46:42
你在找什么叫做分析器。 – GrandmasterB 2010-09-22 20:46:50
可能的重复[什么是一些好的.NET分析器?](http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb 2010-09-22 20:47:05