ICorProfilerInfo2::GetGenerationBounds Method

Gets the memory regions, which are segments of the heap, that make up the various garbage collection generations.

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

Parameters

  • cObjectRanges
    [in] The number of elements allocated by the caller for the ranges array.

  • pcObjectRanges
    [out] A pointer to an integer that specifies the total number of ranges, some or all of which will be returned in the ranges array.

  • ranges
    [out] An array of COR_PRF_GC_GENERATION_RANGE structures, each of which describes a range (that is, block) of memory within the generation that is undergoing garbage collection.

Remarks

The GetGenerationBounds method can be called from any profiler callback, provided that garbage collection is not in progress. That is, it can be called from any callback except those that occur between ICorProfilerCallback2::GarbageCollectionStarted and ICorProfilerCallback2::GarbageCollectionFinished.

Most shifting of generations takes place during garbage collections. Generations might grow between collections but generally do not move around. Therefore, the most interesting places to call GetGenerationBounds are in ICorProfilerCallback2::GarbageCollectionStarted and ICorProfilerCallback2::GarbageCollectionFinished.

During program startup, some objects are allocated by the common language runtime (CLR) itself, generally in generations 3 and 0. Thus, by the time managed code starts executing, these generations will already contain objects. Generations 1 and 2 will normally be empty, except for dummy objects that are generated by the garbage collector. (The size of dummy objects is 12 bytes in 32-bit implementations of the CLR; the size is larger in 64-bit implementations.) You might also see generation 2 ranges that are inside modules produced by the Native Image Generator (NGen.exe). In this case, the objects in generation 2 are frozen objects, which are allocated when NGen.exe runs rather than by the garbage collector.

This function uses caller-allocated buffers. For more information, see Profiling API Method Conventions.

Requirements

Platforms: See .NET Framework System Requirements.

Header: CorProf.idl, CorProf.h

Library: CorGuids.lib

.NET Framework Versions: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

See Also

Reference

ICorProfilerInfo Interface

ICorProfilerInfo2 Interface

Other Resources

Profiling Interfaces

Profiling (Unmanaged API Reference)