找到应用程序中的瓶颈

use*_*588 7 .net c# profiling visual-studio-2008

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

Win*_*ith 9

您可能希望开始运行一些性能计数器来监视CPU使用率和内存统计信息,并找出正在发生的情况.

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

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

微软的CLR Profiler是免费的.

如果你还没有拿出任何东西,是时候打破大枪了:WinDbg.如果你走得这么远,你会发现苔丝的博客非常有帮助.


Mik*_*vey 6

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

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

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

我会试着解释它为什么会起作用.首先,"瓶颈"的共同概念严重误导.软件并不慢,因为它有收缩或"热"的地方.当然,它可以有高速缓存未命中等,但占主导地位的原因,它是缓慢的是,它做更多比它需要-通常是很多了.

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

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

怀疑是好的,但你可能会惊讶它的运作情况.