更新:2007 年 11 月
分析 API 提供有关在公共语言运行库 (CLR) 中发生的各种事件和操作的信息。您可以使用此信息监视进程的内部工作并分析 .NET Framework 应用程序的性能。
支持的功能
分析 API 检索有关在 CLR 中发生的以下操作和事件的信息:
CLR 启动和关闭事件。
应用程序域的创建和关闭事件。
程序集的加载和卸载事件。
模块的加载和卸载事件。
COM vtable 的创建和析构事件。
实时 (JIT) 编译和代码间距调整事件。
类的加载和卸载事件。
线程的创建和析构事件。
函数的进入和退出事件。
异常。
在执行托管代码与执行非托管代码之间进行的转换。
在不同运行库上下文之间进行的转换。
有关运行库挂起的信息。
有关运行库内存堆和垃圾回收活动的信息。
可通过任何与(非托管)COM 兼容的语言来调用分析 API。
在 CPU 和内存消耗方面,API 的效率高。分析不包括对分析的应用程序所做的更改,这些更改很重要,足以产生令人误解的结果。
分析 API 对于取样和非取样探查器都很有用。“取样探查器”每隔一定的时钟滴答数(例如每隔 5 毫秒)便会检查一次配置文件。 “非取样探查器”与引起事件的线程同步获悉事件。
不支持的功能
分析 API 不支持以下功能:
非托管代码。CLR 分析 API 只适用于托管代码。您必须使用常规的 Win32 机制分析非托管代码。但是,CLR 探查器添加了过渡事件以确定托管代码与非托管代码之间的界限。
自修改应用程序。分析 API 不支持出于某些目的(如面向方面的编程)而修改其自己的代码的应用程序。
界限检查。分析 API 未提供检查界限所需的信息。CLR 为所有托管代码的界限检查提供了内部支持。
远程分析。由于以下原因,CLR 代码探查器接口不支持远程分析:
远程分析延长了执行时间。在使用探查器接口时,必须使执行时间降到最少,以便分析结果不会受到不良影响。特别是当正在监视执行性能时,更应该这么做。但是,在使用探查器接口监视内存使用情况或者获取有关堆栈帧、对象等方面的运行时信息时,远程分析不是限制。
CLR 代码探查器必须向正在运行分析应用程序的本地计算机上的运行库注册一个或多个回调接口。这限制了创建远程代码探查器的能力。
在具有高可用性要求的生产环境中进行分析。为了支持开发时诊断,已经创建了分析 API。尚未进行支持生产环境所需的严格测试。