了解性能分析器的性能收集方法

本文档概述了 Visual Studio 性能探查器中工具使用的数据收集方法。

采样

采样收集有关应用程序在分析期间执行的工作的统计数据,是一个很好的起点,可以帮助我们找到加快应用程序速度的区域。 采样方法按指定的时间间隔收集应用程序中正在执行的函数的相关信息。 数据收集是通过定期收集应用程序的信息或采样频率(例如每毫秒)来完成的。 将分析收集的数据,以创建应用程序中花费时间的模型。 如果需要对调用时间进行准确测量或首次在应用程序中查找性能问题,则可能需要使用采样。

采样在调用数方面的准确性较低,但对探查器的成本较低,对所分析的应用程序的执行影响不大。 使用采样方法的性能探查器中的工具包括 CPU 使用率 工具。

完成数据收集后,CPU 使用情况工具将分析捕获的数据并显示报表。

跟踪

跟踪提供有关执行方法的频率的更好信息。 如果需要对呼叫号码进行准确的度量,请使用跟踪。 跟踪可能会对收集过程中代码的性能产生更大的影响,但采样只会产生较小的开销。 此外,跟踪分析速度可能会变慢,因为收集后查看数据所需的时间更长。

Instrumentation

检测分析收集有关应用程序在分析运行期间执行的工作的详细信息。 数据收集是通过将代码注入到捕获计时信息的二进制文件中或使用回调挂钩在应用程序运行时收集和发出确切计时和调用计数信息的工具完成的。 与基于采样的方法相比,检测方法的开销较高。 使用检测的性能探查器中的工具包括 检测 工具和 .NET 对象分配 工具。

采样与仪器化

采样的价值在于,其开销较小,因此更有可能在统计上代表生产中运行的应用程序。 仪器化分析的价值在于,它可以确切记录函数被调用的次数。 这为你提供比正常采样更详细的信息,这可能会扭曲某些情况下所需的时间。 例如,那些功能不多但经常被调用的函数会比在真实场景中出现得更多。

使用检测时,应用程序中选择的每个函数调用都会进行批注和检测,以便在调用时,它会连同有关调用方的信息一起添加到跟踪中。 通过采样技术,以一定间隔从 CPU 获取当前执行的调用堆栈,并将每个帧添加到追踪中。