Share via


ICorProfilerCallback4::SurvivingReferences2 메서드

비압축 가비지 수집의 결과로 힙에 있는 개체의 레이아웃을 보고합니다. 이 메서드는 프로파일러가 ICorProfilerCallback4 인터페이스를 구현한 경우에 호출됩니다. 이 콜백은 길이가 ULONG으로 표현될 수 있는 길이를 초과하는 큰 개체 범위를 보고할 수 있어 ICorProfilerCallback2::SurvivingReferences 메서드를 대체합니다.

구문

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

매개 변수

cSurvivingObjectIDRanges
[in] 비압축 가비지 수집 후에 유지된 연속 개체 블록 수입니다. 즉, cSurvivingObjectIDRanges 값은 각 개체 블록의 ObjectID 및 길이를 각각 저장하는 objectIDRangeStartcObjectIDRangeLength 배열의 크기입니다.

SurvivingReferences2의 다음 두 인수는 병렬 배열입니다. 즉, objectIDRangeStartcObjectIDRangeLength는 동일한 연속 개체 블록과 관련이 있습니다.

objectIDRangeStart
[in] 메모리에서 연속 라이브 개체 블록의 시작 주소를 각각 나타내는 ObjectID 값의 배열입니다.

cObjectIDRangeLength
[in] 메모리에 유지되는 연속 개체 블록의 크기를 각각 나타내는 정수 배열입니다.

크기는 objectIDRangeStart 배열에서 참조된 각 블록에 대해 지정됩니다.

설명

개체가 가비지 수집 후에 유지되었는지 여부를 확인하려면 objectIDRangeStartcObjectIDRangeLength 배열의 요소를 다음과 같이 해석해야 합니다. ObjectID 값(ObjectID)이 다음 범위 내에 있다고 가정합니다.

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

i 값이 다음 범위에 있는 경우 개체가 가비지 수집 후에 유지되었습니다.

0 <= i<cSurvivingObjectIDRanges

비압축 가비지 컬렉션은 "데드" 개체가 사용한 메모리를 회수하지만 확보된 공간을 압축하지는 않습니다. 따라서 메모리가 힙에 반환되지만 "라이브" 개체는 이동되지 않습니다.

CLR(공용 언어 런타임)은 비압축 가비지 수집을 위해 SurvivingReferences2를 호출합니다. 압축 가비지 수집의 경우 대신 MovedReferences2가 호출됩니다. 한 세대는 단일 가비지 수집을 압축하고 다른 세대는 압축하지 않을 수 있습니다. 특정 세대의 가비지 수집에 대해 프로파일러는 SurvivingReferences2 콜백이나 MovedReferences2 콜백 중 하나를 받게 되며 둘 다 받을 수는 없습니다.

제한된 내부 버퍼링, 서버 가비지 컬렉션 중 여러 콜백 발생 및 기타 이유로 인해 특정 가비지 컬렉션 중 SurvivingReferences2 콜백을 여러 개 받을 수도 있습니다. 가비지 수집 중 여러 콜백이 발생하는 경우 정보가 누적됩니다. SurvivingReferences2 콜백에 보고된 모든 참조가 가비지 수집 후에 유지됩니다.

프로파일러가 ICorProfilerCallbackICorProfilerCallback4 인터페이스를 둘 다 구현하는 경우 SurvivingReferences2 메서드가 ICorProfilerCallback2::SurvivingReferences 메서드 앞에 호출되지만 SurvivingReferences2가 성공적으로 반환되는 경우에만 호출됩니다. 프로파일러는 두 번째 메서드 호출을 방지하기 위해 SurvivingReferences2 메서드에서 실패를 나타내는 HRESULT를 반환할 수 있습니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

.NET Framework 버전: 4.5부터 사용 가능

참고 항목