更新:2007 年 11 月
提供公共语言运行库 (CLR) 在代码探查器订阅的事件发生时用来通知该探查器的方法。ICorProfilerCallback2 接口是对 ICorProfilerCallback 接口的扩展。也就是说,它提供了 .NET Framework 2.0 版中引入的新回调。
![]() |
---|
每个方法实现都必须返回一个 HRESULT,如果成功,则它的值为 S_OK,否则它的值为 E_FAIL。目前,CLR 会忽略每个回调(ICorProfilerCallback::ObjectReferences 除外)返回的 HRESULT。 |
interface ICorProfilerCallback2 : ICorProfilerCallback
{
HRESULT ThreadNameChanged(
[in] ThreadID threadId,
[in] ULONG cchName,
[in] WCHAR name[]);
HRESULT GarbageCollectionStarted(
[in] int cGenerations,
[in, size_is(cGenerations), length_is(cGenerations)] BOOL generationCollected[],
[in] COR_PRF_GC_REASON reason);
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG cObjectIDRangeLength[] );
HRESULT GarbageCollectionFinished();
HRESULT FinalizeableObjectQueued(
[in] DWORD finalizerFlags,
[in] ObjectID objectID);
HRESULT RootReferences2(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID rootRefIds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_KIND rootKinds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_FLAGS rootFlags[],
[in, size_is(cRootRefs)] UINT_PTR rootIds[]);
HRESULT HandleCreated(
[in] GCHandleID handleId,
[in] ObjectID initialObjectId);
HRESULT HandleDestroyed(
[in] GCHandleID handleId);
}
方法
方法 |
说明 |
---|---|
通知代码探查器某个具有终结器的对象已排入队列,等待终结器线程执行其 Finalize 方法。 |
|
通知探查器已完成垃圾回收并为其发出了所有垃圾回收回调。 |
|
通知代码探查器已启动垃圾回收。 |
|
通知代码探查器已创建某个垃圾回收句柄。 |
|
通知代码探查器某个垃圾回收句柄已销毁。 |
|
通知探查器有关在发生垃圾回收后进行的根引用的信息。此方法是对 ICorProfilerCallback::RootReferences 方法的扩展。 |
|
通知探查器有关在垃圾回收中保留下来的对象引用的信息。 |
|
通知代码探查器线程的名称已更改。 |
备注
当探查器订阅的事件发生时,CLR 将调用 ICorProfilerCallback(或 ICorProfilerCallback2)接口中的方法来通知该探查器。这是 CLR 用来与代码探查器通信的主回调接口。
代码探查器必须实现 ICorProfilerCallback 接口的方法。对于 .NET Framework 2.0 版及更高版本,该探查器还必须实现 ICorProfilerCallback2 方法。每个方法实现都必须返回一个 HRESULT,如果成功,则它的值为 S_OK,否则它的值为 E_FAIL。目前,CLR 会忽略每个回调(ICorProfilerCallback::ObjectReferences 除外)返回的 HRESULT。
代码探查器必须在 Microsoft Windows 注册表中注册其实现 ICorProfilerCallback 和 ICorProfilerCallback2 接口的 COM 对象。代码探查器通过调用 ICorProfilerInfo::SetEventMask 来订阅需要接收其相关通知的事件。此操作通常在探查器实现 ICorProfilerCallback::Initialize 时完成。这样,当执行中的运行库进程内即将发生或已发生某个事件时,探查器便能收到来自该运行库的通知。
![]() |
---|
探查器注册单个 COM 对象。如果探查器面向的是 .NET Framework 1.0 或 1.1 版,则该 COM 对象仅需实现 ICorProfilerCallback 的方法。如果探查器面向的是 .NET Framework 2.0 版及更高版本,则该 COM 对象还必须实现 ICorProfilerCallback2 的方法。 |
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorProf.idl
**库:**CorGuids.lib
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0