【发布时间】:2009-07-17 22:41:56
【问题描述】:
我知道 Redgate 的 Ants Profiler,我听说它很棒,但也是 400 美元。是否有任何更便宜的替代方案至少可以指出我可能需要优化代码的地方?
【问题讨论】:
-
见stackoverflow.com/questions/911932/…进一步讨论/选项
标签: c# asp.net performance profiler
我知道 Redgate 的 Ants Profiler,我听说它很棒,但也是 400 美元。是否有任何更便宜的替代方案至少可以指出我可能需要优化代码的地方?
【问题讨论】:
标签: c# asp.net performance profiler
【讨论】:
Dottrace的价格大约是蚂蚁的一半,真的很不错。由做 ReSharper 的同一个人制作。
如果您只是想一次性优化您的代码,那么无论如何您都应该选择 Ants,因为它提供全功能的 15 天免费试用,应该足以进行大量优化完成。
【讨论】:
VSProfiler 随 VS 一起提供并且运行良好。 如果您正在查看与内存相关的问题,那么 CLRProfiler 将是您的选择。
【讨论】:
一般情况下,我使用的方法是this。
我对代码的计时部分不太感兴趣,而是寻找大量不必要的耗时者,以便我可以清理它们并实现加速。
这真的是一个不同的过程。
添加:如果我能详细说明,我看到的典型性能问题是某些活动(几乎总是一个函数调用)正在消耗一些时间,比如 10%、50%、90% 等等,它是没有必要——它可以用其他东西代替或根本不做,这样就可以节省大量时间。
假设为 50%。
我对调用堆栈进行随机时间采样,例如 10 个,并且该调用有 50% 的机会出现在每个调用堆栈上,因此它将出现在大约一半的样本上。因此它会引起我的注意,我会看看它正在做的事情是否真的有必要,如果没有,我会修复它以获得加速。
现在,这是在测量吗?如果是这样,那确实是测量不佳,因为样本数量太少了。如果 10 个样本中有 5 个显示调用,则时间比例可能在 50% 左右,给予或接受,肯定超过 10%。所以我可能不知道精确的百分比,但我肯定知道它值得修复,而且我肯定知道问题出在哪里。
(旁注:我没有计算调用次数,也没有估计调用持续时间。相反,我估计了调用的成本,即移除它会节省的成本,即它在堆栈上的驻留时间分数。另请注意,我在 call 级别工作,而不是 function 级别。我可能关心在感兴趣的调用之上和之下的函数调用,但除此之外,函数级问题,例如独占时间、调用图和递归,没有任何作用。)
这就是为什么我说衡量性能和发现性能问题虽然可能是互补的,但实际上是不同的任务。
【讨论】: