Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
探查器本身对.Net中性能度量的影响_.net_Visual Studio 2010_Performance_Profiler_Performance Testing - Fatal编程技术网

探查器本身对.Net中性能度量的影响

探查器本身对.Net中性能度量的影响,.net,visual-studio-2010,performance,profiler,performance-testing,.net,Visual Studio 2010,Performance,Profiler,Performance Testing,运行Visual Studio 2010 profiler对我的程序的性能有什么影响?也就是说,由于探查器如何“干扰”程序的正常操作以检查性能,探查器的结果在哪些方面实际上不准确?还是有这样的问题 这个问题源于这样一个事实,即我在VisualStudio2010分析器(我用C#编程)中看到属性get/set在我的方法中占用了大量时间。这些属性是由.resx资源字典自动生成的(避免使用魔术字符串:-),因此我假设JIT编译器和/或在后台运行的解释器通常会将它们内联,如果它们有用的话。我想,虽然这样

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

这个问题源于这样一个事实,即我在VisualStudio2010分析器(我用C#编程)中看到属性get/set在我的方法中占用了大量时间。这些属性是由.resx资源字典自动生成的(避免使用魔术字符串:-),因此我假设JIT编译器和/或在后台运行的解释器通常会将它们内联,如果它们有用的话。我想,虽然这样的内联在运行分析器时不会发生。。。还是这样

我专门使用VisualStudio2010探查器,但如果能提供一个包含其他探查器的答案,我将不胜感激


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

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

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

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

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


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

在我看来,这取决于

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

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

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


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

仅澄清一下,对于采样评测,确切的数字是多少?执行的代码行数?探查器捕获执行特定方法的代码的次数?调用方法的次数?我在VS文档中对此并不清楚。正如我所说的,每隔1000万个时钟周期(默认值),探查器就会对执行的每个线程的调用堆栈进行快照。它不具侵入性(无探头)。它可以看作是对许多调用堆栈的统计分析。inclusive(示例包括从该函数调用函数所花费的时间)和exclusive之间也有区别(示例不包括从该函数调用的函数所花费的时间。感谢您的澄清-我现在明白了。感谢您的回答。只是澄清一下,对于采样分析,那么,精确计算的是什么?执行的代码行数?探查器捕获执行特定方法的代码的次数?时间数调用了什么方法?这在VS文档中我并不清楚。正如我所说的,每1000万个时钟周期(默认值),探查器就会对每个正在执行的线程的调用堆栈进行一次快照。它不是直观的(没有探测)。它可以被视为对许多调用堆栈的统计分析。同时,还可以区分包含(示例包括从该函数调用函数所花费的时间)或独占(示例不包括从该函数调用函数所花费的时间。谢谢