了解分析工具中的检测数据值

Visual Studio 分析工具的检测分析方法在分析的二进制文件中目标函数的开始和结尾以及这些函数对其他函数的每次调用前后插入代码。 插入的代码记录了以下信息:

  • 此收集事件与上一收集事件之间的间隔。

  • 在此间隔内操作系统是否执行了操作。 例如,操作系统可能读写磁盘,或者在目标线程与另一个进程中的另一个线程之间进行切换。

对于每个间隔,探查器分析都重新构造在此间隔结束时存在的调用堆栈。 调用堆栈是某个时间点处理器上处于活动状态的函数列表。 只有一个函数(当前函数)正在执行代码;其他函数都是导致调用当前函数的函数调用链(调用堆栈)。

对于调用堆栈上的每个函数,当记录间隔时,探查器分析都会向该函数的四个数据值中的一个或多个添加此间隔。 分析基于两个条件向函数的数据值添加间隔:

  • 此间隔发生在函数代码中还是子函数(函数调用的函数)中。

  • 此间隔中是否发生了操作系统事件。

函数间隔或数据范围的数据值命名为“已用非独占”、“已用独占”、“应用程序非独占”和“应用程序独占”:

  • 函数的所有间隔都添加到“已用非独占”数据值。

  • 如果间隔发生在函数代码中而不是子函数中,则间隔添加到该函数的“已用独占”数据值。

  • 如果在间隔中没有发生操作系统事件,则间隔添加到“应用程序非独占”数据值。

  • 如果在间隔中没有发生操作系统事件,并且间隔发生在函数代码的直接执行中(也就是说,间隔没有发生在子函数中),则将间隔添加到“应用程序独占”数据值。

分析工具报告聚合分析会话本身以及会话的进程、线程和二进制文件中函数的总值。

“已用非独占”值

执行函数及其子函数所用的总时间。

“已用非独占”值包括直接执行函数代码所用的间隔和执行目标函数的子函数所用的间隔。 函数或其子函数的间隔(包含等待操作系统的间隔)也包括在“已用非独占”值中。

“已用独占”值

执行函数所用的时间,不包括子函数所用的时间。

“已用独占”值包括直接执行函数代码所用的间隔,而不考虑该间隔中是否发生操作系统事件。 目标函数调用的子函数所用的全部间隔都没有包括在“已用独占”值中。

“应用程序非独占”值

执行函数及其子函数所用的时间,不包括操作系统事件所用的时间。

“应用程序非独占”值不包括包含操作系统事件的间隔。 “应用程序非独占”值包括执行函数所用的其他所有间隔,无论该间隔是直接执行函数代码所用的间隔还是目标函数的子函数所用的间隔。

“应用程序独占”值

执行函数所用的时间,不包括子函数所用的时间和操作系统事件所用的时间。

“应用程序独占”值不包括包含操作系统事件的间隔或执行该函数调用的函数所用的间隔。 “应用程序独占”值仅包括直接执行函数代码所用的间隔和不包含操作系统事件的间隔。

已用非独占百分比

函数、模块、线程或进程的“已用非独占”值占分析会话的“已用非独占”总值的百分比。

100 * 函数已用非独占/会话已用非独占

已用独占百分比

函数、模块、线程或进程的“已用独占”值占分析会话的“已用非独占”总值的百分比。

100 * 函数已用独占/会话已用非独占

应用程序非独占百分比

函数、模块、线程或进程的“应用程序非独占”值占分析会话的“应用程序非独占”总值的百分比。

100 * 函数应用程序非独占/会话应用程序非独占

应用程序独占百分比

函数、模块、线程或进程的“应用程序独占”间隔占分析会话的“应用程序非独占”总值的百分比。

100 * 函数应用程序独占/会话应用程序非独占

请参见

任务

如何:选择收集方法

概念

对分析工具数据进行分析