다음을 통해 공유


ICorProfilerCallback::MovedReferences 메서드

압축 가비지 수집의 결과로 힙에 있는 개체의 새 레이아웃을 보고하기 위해 호출됩니다.

문법

HRESULT MovedReferences(
    [in]  ULONG  cMovedObjectIDRanges,
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ULONG    cObjectIDRangeLength[] );

매개 변수

cMovedObjectIDRanges [in] 압축 가비지 수집의 결과로 이동한 연속 개체의 블록 수입니다. 즉, 값 cMovedObjectIDRanges 은 , newObjectIDRangeStartcObjectIDRangeLength 배열의 oldObjectIDRangeStart총 크기입니다.

다음 세 인수 MovedReferences 는 병렬 배열입니다. 즉, oldObjectIDRangeStart[i]모든 newObjectIDRangeStart[i]cObjectIDRangeLength[i] 항목은 연속 개체의 단일 블록과 관련이 있습니다.

oldObjectIDRangeStart [in] 각각 메모리에 ObjectID 있는 연속된 라이브 개체 블록의 이전(가비지 수집 전) 시작 주소인 값의 배열입니다.

newObjectIDRangeStart [in] 각각 메모리에 ObjectID 있는 연속된 라이브 개체 블록의 새(가비지 후 수집) 시작 주소인 값의 배열입니다.

cObjectIDRangeLength [in] 각각 메모리에 있는 연속 개체 블록의 크기인 정수 배열입니다.

크기는 배열 및 newObjectIDRangeStart 배열에서 참조되는 각 블록에 oldObjectIDRangeStart 대해 지정됩니다.

비고

중요합니다

이 메서드는 MAX_ULONG 64비트 플랫폼에서 4GB보다 큰 개체의 크기를 보고합니다. 4GB보다 큰 개체의 크기를 얻으려면 ICorProfilerCallback4::MovedReferences2 메서드를 대신 사용합니다.

압축 가비지 수집기는 죽은 개체가 차지하는 메모리를 회수하고 공간을 확보한 압축을 합니다. 따라서 라이브 개체가 힙 내에서 이동될 수 있으며 ObjectID 이전 알림에 의해 배포된 값이 변경될 수 있습니다.

기존 ObjectID 값(oldObjectID)이 다음 범위 내에 있다고 가정합니다.

oldObjectIDRangeStart[i] <= oldObjectID<oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]

이 경우 범위 시작부터 개체 시작까지의 오프셋은 다음과 같습니다.

oldObjectID - oldObjectRangeStart[i]

해당 값의 i 경우 다음 범위에 있습니다.

0 <= i<cMovedObjectIDRanges

다음과 같이 새 ObjectID 항목을 계산할 수 있습니다.

newObjectID = newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])

ObjectID 가비지 수집이 이전 위치에서 새 위치로 MovedReferences 개체를 이동하는 중간에 있을 수 있으므로 전달된 값은 콜백 자체 중에 유효하지 않습니다. 따라서 프로파일러가 호출 중에 MovedReferences 개체를 검사하려고 시도해서는 안 됩니다. ICorProfilerCallback2::GarbageCollectionFinished 콜백은 모든 개체가 새 위치로 이동되었으며 검사를 수행할 수 있음을 나타냅니다.

요구 사항

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

머리글: CorProf.idl, CorProf.h

도서관: CorGuids.lib

.NET Framework 버전: 2.0 이후 사용 가능

참고하십시오