ICorProfilerInfo2::GetGenerationBounds 方法

获取组成各个垃圾回收代的内存区域(堆中的段)。

HRESULT GetGenerationBounds(
    [in]  ULONG cObjectRanges,
    [out] ULONG *pcObjectRanges,
    [out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);

参数

  • cObjectRanges
    [in] 调用方为 ranges 数组分配的元素数。

  • pcObjectRanges
    [out] 一个指针,指向一个指定范围总数的整数,其中的部分或全部范围将在 ranges 数组中返回。

  • ranges
    [out] 一个由 COR_PRF_GC_GENERATION_RANGE 结构组成的数组,其中的每个结构都描述正在进行垃圾回收的代中的一个内存范围(即块)。

备注

GetGenerationBounds 方法可以从任何探查器回调中调用,但前提是当前未在进行垃圾回收。 也就是说,除了在 ICorProfilerCallback2::GarbageCollectionStartedICorProfilerCallback2::GarbageCollectionFinished 之间发生的回调外,可以从任何回调中调用此方法。

大多数代移位都发生在垃圾回收期间。 代在回收之间可能变大,但通常不会移动。 因此,在调用 GetGenerationBounds 时,最应关注的位置是在 ICorProfilerCallback2::GarbageCollectionStartedICorProfilerCallback2::GarbageCollectionFinished 中。

在程序启动期间,公共语言运行时 (CLR) 本身会分配一些对象(通常在第 3 代和第 0 代中)。 这样,到托管代码开始执行时,这些代中将已包含对象。 第 1 代和第 2 代通常为空,但有时会包含由垃圾回收器生成的虚拟对象。 (在 CLR 的 32 位实现中,虚拟对象的大小为 12 字节;在 64 位实现中,虚拟对象的大小将更大)。在本机映像生成器 (NGen.exe) 生成的模块内,还可以查看第 2 代的范围。 在这种情况下,第 2 代中的对象将是“冻结对象”,这些对象是在 NGen.exe 运行时分配的,而不是由垃圾回收器分配的。

此函数使用由调用方分配的缓冲区。 有关更多信息,请参见 分析 API 方法约定

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl、CorProf.h

**库:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

参考

ICorProfilerInfo 接口

ICorProfilerInfo2 接口

其他资源

分析接口

分析(非托管 API 参考)