分析 API 中的通知线程

更新:2007 年 11 月

大多数情况下,生成事件的线程也会执行通知。此类通知(例如,FunctionEnterFunctionLeave)无需提供显式的 ThreadID。同时,探查器可能决定使用线程本地存储区来存储和更新其分析块,而不是基于受影响线程的 ThreadID 对全局存储区中的分析块进行索引。

请注意,这些回调未经过序列化。用户必须通过创建线程安全的数据结构,并通过在必须防止从多个线程中进行并行访问的位置锁定探查器代码来保护其代码。因此,在某些情况下,您可能会收到不正常的回调序列。例如,假设托管应用程序正在生成执行相同代码的两个线程。这种情况下,在收到 ICorProfilerCallback::JITCompilationFinished 回调之前,将可能会从一个线程中收到某个函数的 ICorProfilerCallback::JITCompilationStarted 事件,并从另一个线程中收到 FunctionEnter 回调。在这种情况下,对于可能尚未完全实时 (JIT) 编译的函数,用户将会收到 FunctionEnter 回调。

请参见

其他资源

分析 API 中的常见功能

分析概述