运行Visual Studio 2010探查器对我的程序性能有什么影响?也就是说,由于探查器必须“干扰”程序的正常操作以检查性能,分析器的结果在哪些方面实际上是不准确的?或者有这样的问题吗?
这个问题源于这样一个事实:我看到属性获取/设置占用了我在Visual Studio 2010探查器(我用C#编程)的方法中的大量时间。这些属性是由.resx资源字典自动生成的(避免魔术字符串:-)),因此我假设 JIT编译器和/或在幕后运行的解释器<如果它有用,那么通常会内联它们。我猜想,当你运行探查器时,这样的内联不会发生...或者是吗?
我专门使用Visual Studio 2010探查器,但我希望得到包含其他探查器的答案。
很抱歉,如果我错过了一个已经回答此问题的问题,请随时指出。
答案 0 :(得分:1)
从我的角度来看,这取决于......
您可能知道,有许多分析模式。对于CPU /时间分析,trere是采样和仪表。
样本分析是更“统计”的分析。结果的准确性取决于代码在分析会话期间执行的次数。 Profiler定期获取在目标上执行的每个线程的调用堆栈的快照。如果一个方法有大量的样本,那可能是因为许多执行或长方法执行。它非常轻巧,对系统的性能影响最小,而且易于使用。
该检测涉及在每个被检测的函数的开始和结束处将探针插入目标代码中,以便可以跟踪每个函数调用的进入和退出。在分析会话中,可以精确测量函数调用的确切次数以及执行所需的时间。但是,捕获此细节需要付出代价。在每个函数调用中引入了相当大的处理开销(通常至少10%并且可以容易地100%或更多,但是或多或少取决于被分析的函数的大小)。代码大小的增加和分析器中其他代码的执行也会导致一些不利的CPU缓存效应。
要理解的最后一件重要事情是,可以将分析视为科学方法,因为您应该在真实条件(或实际用例)中测量代码,以找出瓶颈的确切位置并修复它们,因为它们会改善性能