测量方法的哪个部分需要花费大量时间的最佳实践?

时间:2011-02-27 16:29:18

标签: c# optimization

在我的初始化方法中,我调用其他一些方法,操纵一些变量并迭代一些列表。现在我注意到加载方法需要一点点时间(大约2分钟)。

但问题是,我不太确定该方法的哪一部分耗费了这么长时间。所以我想测量一下,这样我就可以开发出最有可能缩短时间的部分。

但衡量这一点的好方法是什么?

3 个答案:

答案 0 :(得分:10)

如果您不想使用Ants performance profiler等分析器,可以使用Stopwatch来衡量运行某些代码的时间。

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

// Code to time

stopWatch.Stop();

TimeSpan ts = stopWatch.Elapsed;

这当然会改变您的代码,并要求您在要衡量的每个点上进行这些修改。

我建议去那里有很多好的个人资料中的一个(我肯定其他答案会指出一些好的)。

答案 1 :(得分:7)

dotTrace Performance Profiler 4.0提供line-by-line profiling。这就是你所需要的。

答案 2 :(得分:2)

  

我不太清楚哪一部分   方法耗费了这么多时间。所以   我想测量它

需要更长时间的事情是very easy to find

例如,如果它比它应该花费的时间长10倍,那意味着90%的时间它正在做不需要的事情。因此,如果您在IDE下运行它并暂停它,那么您在该行为中捕获它的几率为90%。 只需查看调用堆栈,因为您知道问题就在它的某个地方。 如果您不确定是否已经抓住它,请多试几次。问题将出现在多个样本上。

我在.net app startup中找到的典型事项:

  • 不必要地查找国际字符串等资源。
  • 在不必要的程度上在数据结构中行走通知树。

你发现的内容可能会有所不同,但你会发现它。

这是一种低技术但有效的方法。无论是在CPU中还是在I / O中花费时间,它都可以工作。它没有非常精确地测量问题,但确实非常精确地定位了它。 (查看this post的最后一段。)