Share via


ICorProfilerCallback2::RootReferences2 메서드

가비지 수집이 발생한 후 루트 참조에 대해 프로파일러에 알립니다. 이 메서드는 ICorProfilerCallback::RootReferences 메서드의 확장입니다.

구문

HRESULT RootReferences2(  
    [in] ULONG  cRootRefs,  
    [in, size_is(cRootRefs)] ObjectID rootRefIds[],  
    [in, size_is(cRootRefs)] COR_PRF_GC_ROOT_KIND rootKinds[],  
    [in, size_is(cRootRefs)] COR_PRF_GC_ROOT_FLAGS rootFlags[],  
    [in, size_is(cRootRefs)] UINT_PTR rootIds[]);  

매개 변수

cRootRefs
[in] rootRefIds, rootKinds, rootFlags, rootIds 배열의 요소 수입니다.

rootRefIds
[in] 각각 스택의 정적 개체 또는 개체를 참조하는 개체 ID의 배열입니다. rootKinds 배열의 요소는 rootRefIds 배열의 해당 요소를 분류하는 정보를 제공합니다.

rootKinds
[in] 가비지 수집 루트의 형식을 나타내는 COR_PRF_GC_ROOT_KIND 값의 배열입니다.

rootFlags
[in] 가비지 수집 루트의 속성을 설명하는 COR_PRF_GC_ROOT_FLAGS 값의 배열입니다.

rootIds
[in] rootKinds 매개 변수의 값에 따라 가비지 컬렉션 루트에 대한 추가 정보를 포함하는 정수를 가리키는 UINT_PTR 값의 배열입니다.

루트의 형식이 스택인 경우 루트 ID는 변수를 포함하는 함수에 대한 것입니다. 루트 ID가 0이면 함수는 CLR 내부의 명명되지 않은 함수입니다. 루트의 형식이 핸들인 경우 루트 ID는 가비지 수집 핸들에 대한 것입니다. 다른 루트 형식의 경우 ID는 불투명 값이므로 무시해야 합니다.

설명

rootRefIds, rootKinds, rootFlagsrootIds 배열은 병렬 배열입니다. 즉, rootRefIds[i], rootKinds[i], rootFlags[i], rootIds[i] 모두 동일한 루트에 관한 것입니다.

RootReferencesRootReferences2 둘 다 프로파일러에 알리기 위해 호출됩니다. RootReferences2에서 전달된 정보는 RootReferences에서 전달된 정보의 상위 집합이므로 프로파일러가 일반적으로 한 메서드 또는 다른 메서드를 구현하지만 둘 다 구현하지는 않습니다.

rootRefIds의 항목이 0이 될 수 있습니다. 즉, 해당 루트 참조가 null이고 관리되는 힙의 개체를 참조하지 않음을 의미합니다.

콜백 자체가 진행되는 동안 RootReferences2를 통해 전달된 값은 유효하지 않습니다. 가비지 수집이 이전 위치에서 새 위치로 개체를 이동하는 중일 수 있기 때문입니다. 그러므로 프로파일러는 RootReferences2 호출 중에 개체 검사를 시도하지 않아야 합니다. ICorProfilerCallback2::GarbageCollectionFinished가 호출되었을 때 모든 개체가 새 위치로 이동되었으며 안전하게 검사할 수 있습니다.

요구 사항

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

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

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

참고 항목