Reports the layout of objects in the heap as a result of a non-compacting garbage collection.
HRESULT SurvivingReferences( [in] ULONG cSurvivingObjectIDRanges, [in, size_is(cSurvivingObjectIDRanges)] ObjectID objectIDRangeStart , [in, size_is(cSurvivingObjectIDRanges)] ULONG cObjectIDRangeLength );
The elements of the objectIDRangeStart and cObjectIDRangeLength arrays should be interpreted as follows to determine whether an object survived the garbage collection. Assume that an ObjectID value (ObjectID) lies within the following range:
ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]
For any value of i that is in the following range, the object has survived the garbage collection:
0 <= i < cSurvivingObjectIDRanges
A non-compacting garbage collection reclaims the memory occupied by "dead" objects, but does not compact that freed space. As a result, memory is returned to the heap, but no "live" objects are moved.
The common language runtime (CLR) calls SurvivingReferences for non-compacting garbage collections. For compacting garbage collections, ICorProfilerCallback::MovedReferences is called instead. A single garbage collection can be compacting for one generation and non-compacting for another. For a garbage collection on any particular generation, the profiler will receive either a SurvivingReferences callback or a MovedReferences callback, but not both.
Multiple SurvivingReferences callbacks might be received during a particular garbage collection, due to limited internal buffering, multiple threads reporting in the case of server garbage collection, and other reasons. In the case of multiple callbacks during a garbage collection, the information is cumulative — all references that are reported in any SurvivingReferences callback survive the garbage collection.
Platforms: See .NET Framework System Requirements.
Header: CorProf.idl, CorProf.h
.NET Framework Versions: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0