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입니다. 루트 ID가 0이면 해당 함수는 CLR 내부의 관리되지 않는 함수입니다. 루트 형식이 핸들이면 루트 ID는 가비지 수집 핸들의 ID입니다. 다른 형식의 루트일 경우 해당 ID는 불분명한 값이므로 무시됩니다.
설명
rootRefIds, rootKinds, rootFlags 및 rootIds 배열은 병렬 배열입니다. 즉, rootRefIds[i], rootKinds[i], rootFlags[i] 및 rootIds[i]는 모두 동일한 루트와 관련되어 있습니다.
RootReferences와 RootReferences2는 모두 프로파일러에 알림을 보내기 위해 호출됩니다. 일반적으로 프로파일러에서는 이 중 하나의 메서드를 구현하지만 RootReferences2에 전달되는 정보는 RootReferences에 전달되는 정보를 포함하므로 이 둘을 모두 구현하지는 않습니다.
rootRefIds의 항목은 0일 수 있습니다. 이는 해당 루트 참조가 null이며 관리되는 힙의 개체를 참조하지 않음을 나타냅니다.
RootReferences2에서 반환된 개체 ID는 콜백 중에는 유효하지 않습니다. 이는 이전 주소에서 새 주소로 개체를 이동하는 과정에서 가비지 수집이 수행될 수 있기 때문입니다. RootReferences2를 호출하는 동안에는 프로파일러가 개체를 검사하지 않아야 합니다. ICorProfilerCallback2::GarbageCollectionFinished가 호출되면 모든 개체가 새 위치로 이동된 것이므로 개체를 안전하게 검사할 수 있습니다.
요구 사항
플랫폼: .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