다음을 통해 공유


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의 값은 oldObjectIDRangeStart, newObjectIDRangeStart 및 cObjectIDRangeLength 배열의 총 크기입니다.

    MovedReferences의 다음 세 인수는 병렬 배열입니다. 즉, oldObjectIDRangeStart[i], newObjectIDRangeStart[i] 및 cObjectIDRangeLength[i]는 모두 연속적 개체의 단일 블록에 관련됩니다.

  • oldObjectIDRangeStart
    [in] 메모리에 있는 연속적 활성 개체 블록의 이전(가비지 수집 전) 시작 주소를 나타내는 각 ObjectID 값의 배열입니다.

  • newObjectIDRangeStart
    [in] 메모리에 있는 연속적 활성 개체 블록의 새(가비지 수집 후) 시작 주소를 나타내는 각 ObjectID 값의 배열입니다.

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

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

설명

압축 가비지 수집기는 비활성 개체에서 사용한 메모리를 회수하고 확보된 해당 공간을 압축합니다. 따라서 활성 개체가 힙 내에서 이동할 수 있으며 이전 알림에서 전달된 ObjectID 값이 변경될 수 있습니다.

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

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

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

oldObjectID - oldObjectRangeStart[i]

임의의 i 값이 다음 범위에 있으면

0 <= i < cMovedObjectIDRanges

새 ObjectID를 다음과 같이 계산할 수 있습니다.

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

콜백 중에는 가비지 수집 과정에서 개체를 이전 위치에서 새 위치로 이동하는 중일 수 있으므로 MovedReferences에서 전달된 ObjectID 값이 유효하지 않습니다. 따라서 MovedReferences를 호출하는 동안에는 프로파일러가 개체를 검사하지 않아야 합니다. ICorProfilerCallback2::GarbageCollectionFinished 콜백이 호출되면 모든 개체가 새 위치로 이동된 것이므로 검사를 수행할 수 있습니다.

프로파일링 API에서 ObjectID 값을 추적하는 방법에 대한 자세한 내용은 프로파일링 API의 개체 추적을 참조하십시오.

요구 사항

플랫폼: .NET Framework 시스템 요구 사항 참조

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

참고 항목

참조

ICorProfilerCallback 인터페이스

기타 리소스

프로파일링 인터페이스

프로파일링(관리되지 않는 API 참조)