找到应用程序中的瓶颈

时间:2010-08-21 21:40:48

标签: c# .net visual-studio-2008 profiling

我有一个.NET应用程序,它可以快速运行大约2000条记录,这些记录开始变得非常慢。我试图找到瓶颈,我想知道是否有一个好的,可能是免费的,但它不一定是,工具或找到瓶颈的方法。我正在尝试找到一个未清除的列表,但我还没有看到它。我有VS 2008.

4 个答案:

答案 0 :(得分:9)

你可能想开始运行一些performance counters来监控CPU使用率和内存统计数据,并弄清楚发生了什么。

如果这不能引导您获得任何明显的答案,那么就该开始分析了。

JetBrains dotTrace有30天的免费试用期。这是一个相当不错的内存和性能分析器,你可能想看看。

微软的CLR Profiler是免费的。

如果你还没有拿出任何东西,是时候打破大枪了:WinDbg。如果你做到这一点,你会发现Tess' blog非常有帮助。

答案 1 :(得分:6)

有一个非常好的免费工具,你已经拥有它。唯一的缺点是,从一开始就可能不直观。

当程序运行缓慢时,请在IDE下暂停。检查调用堆栈。 (我关闭了参数的显示;我只对特定的代码行感兴趣。我将整个堆栈复制到文本编辑器,如记事本。)多次这样做。它越慢,您在看到问题之前需要的样本就越少。

如果你看到一个或多个可疑的声明,就像它们出现在健康的一小部分样本(至少两个)上,你应该注意那些。我所做的是再拿几个样本直到它们出现,因为我想了解它们为什么被执行。这很重要,因为如果我可以用花费更少时间的东西替换它们,我会节省很大一部分。

我会试着解释它为什么会起作用。 首先,“瓶颈”的共同概念严重误导。 软件并不慢,因为它有收缩或“热”的地方。 当然它可能有缓存未命中等等,但主要原因 它的速度很慢,它的功能超出了它的需要 - 通常是很多

它在野生嵌套函数调用中心上发布, 随着理由越来越远。 这显示为一个比必要的更加浓密的调用树。 你所要做的就是找到可以修剪的大树枝。 这就是暂停技术的作用。

因此,当你正在四处寻找可以帮助你找侦探找到难以捉摸的“瓶颈”的工具时,做一名树外科医生,并通过暂停找到你可以从呼叫树中修剪最重的分支,并且继续这样做,直到你不能。

怀疑是好的,但你可能会感到惊讶它的效果如何。

答案 2 :(得分:1)

来自Adam Calderon的

This page链接到一些关于性能分析的MSDN博客页面。

然而,大多数(如果不是全部)它们似乎与Visual Studio Team System有关。因此,如果您可以访问该版本的软件,则可以“免费”获得一些工具。

答案 3 :(得分:0)

DevPartner for C ++我的MicroFocus(以前的Compuware)有一个性能分析器,有点不错。 英特尔让V-Tune做同样的事情。 (我认为是英特尔......我从未使用它)。 我最喜欢的是Visual Studio Team Edition附带的那个。这很棒。 您还应该检测自己的代码,并编写自动化测试,以便将一个构建与下一个构建进行比较。