1

例如,运行 Visual Studio 2010 分析器对我的程序性能有何影响?也就是说,由于探查器必须如何“干扰”程序的正常操作以检查性能,探查器的结果实际上在哪些方面不准确?或者有没有这样的问题?

这个问题源于这样一个事实,即我在 Visual Studio 2010 分析器(我用 C# 编程)中的方法中看到属性获取/设置占用了大量时间。这些属性是由 .resx 资源字典自动生成的(避免使用魔术字符串 :-)),因此我假设JIT 编译器和/或在幕后运行的解释器通常会内联它们,如果它会有帮助。我会假设当您运行分析器时不会发生这种内联......或者是吗?

我专门使用 Visual Studio 2010 探查器,但我希望得到包含其他探查器的答案。

对不起,如果我错过了一个已经回答这个问题的问题 - 请随时指出方向。

4

1 回答 1

1

从我的角度来看,这取决于...

您可能知道,有许多分析模式。对于 CPU/时间分析,主要是采样和检测。

样本分析是更“统计”的分析。结果的准确性取决于分析会话期间代码执行的次数。Profiler 会定期对在目标进程上执行的每个线程的调用堆栈进行快照。如果一个方法有大量样本,可能是因为执行次数多或方法执行时间长。它非常轻量级,对系统的性能影响最小,并且易于使用。

这种检测涉及在每个被检测函数的开始和结束处将探针插入到目标代码中,以便可以跟踪每个函数调用的进入和退出。在分析会话中,可以准确测量函数调用的确切次数以及执行所需的时间。然而,捕捉这些细节是有代价的。每个函数调用都会引入相当大的处理开销(通常至少为 10%,并且很容易达到 100% 或更多,但或多或​​少取决于所分析函数的大小)。分析器中代码大小的增加和附加代码的执行也会导致一些不利的 CPU 缓存效果。

最后要了解的重要一点是,Profiling 可以被视为科学方法,因为您应该在真实条件(或真实用例)中测量您的代码,以找出瓶颈的确切位置并在知道它将提高性能的情况下修复它们。

于 2012-10-04T19:07:15.317 回答