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::GarbageCollectionStarted
和 ICorProfilerCallback2::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 起可用