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 方法,前提是当前未进行垃圾回收。

大多数代切换都发生在垃圾回收期间。 在回收之间,代可能会增长,但通常不会反复切换。 因此,调用 GetGenerationBounds 最具特色的地方在于 ICorProfilerCallback2::GarbageCollectionStartedICorProfilerCallback2::GarbageCollectionFinished 中。

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

此函数使用调用方分配的缓冲区。

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用

另请参阅