ICorProfilerCallback5::ConditionalWeakTableElementReferences 메서드
직접 멤버 필드 참조와 ConditionalWeakTable
종속성을 모두 사용하여 루트를 통해 참조되는 개체의 전이적 Closure를 식별합니다.
구문
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
매개 변수
cRootRefs
[in] keyRefIds
, valueRefIds
및 rootIds
배열의 요소 수입니다.
keyRefIds
[in] 각각 종속 핸들 쌍의 주 요소에 대한 ObjectID
를 포함하는 개체 ID의 배열입니다.
valueRefIds
[in] 각각 종속 핸들 쌍의 보조 요소에 대한 ObjectID
를 포함하는 개체 ID의 배열입니다. (keyRefIds[i]
는 valueRefIds[i]
를 계속 유지합니다.)
rootIds
[in] 가비지 컬렉션 루트에 대한 추가 정보를 포함하는 정수를 가리키는 GCHandleID
값의 배열입니다.
콜백 자체가 진행되는 동안 ObjectID
메서드에서 반환되는 ConditionalWeakTableElementReferences
값은 유효하지 않습니다. 가비지 수집기가 이전 위치에서 새 위치로 개체를 이동하는 중일 수 있기 때문입니다. 그러므로 프로파일러는 ConditionalWeakTableElementReferences
호출 중에 개체 검사를 시도하지 않아야 합니다. GarbageCollectionFinished
시에는 모든 개체가 새 위치로 이동했으므로 검사를 수행해도 됩니다.
예제
다음 코드 예제에서는 ICorProfilerCallback5를 구현하고 이 메서드를 사용하는 방법을 보여 줍니다.
HRESULT Callback5Impl::ConditionalWeakTableElementReferences(
ULONG cRootRefs,
ObjectID keyRefIds[],
ObjectID valueRefIds[],
GCHandleID rootIds[])
{
printf("Callback5Impl::ConditionalWeakTableElementReferences called\n");
for (unsigned int i = 0; i < cRootRefs; ++i)
{
// Save dependency to XML for later retrieval
PersistDependencyToXml(rootIds[i], keyRefIds[i], valueRefIds[i]);
// or store dependency to an internal map
m_cwt_deps->add_dep(rootIds[i], keyRefIds[i], valueRefIds[i]);
// or add arc to object graph
m_obj_graph->add_arc(keyRefIds[i], valueRefIds[i], rootIds[i]);
}
return S_OK;
}
설명
.NET Framework 4.5 이상 버전의 프로파일러는 ICorProfilerCallback5 인터페이스를 구현하고 ConditionalWeakTableElementReferences
메서드가 지정하는 종속성을 기록합니다. ICorProfilerCallback5
는 ConditionalWeakTable
항목으로 표시되는 라이브 개체 간의 전체 종속성 집합을 제공합니다. 이러한 종속성과 ICorProfilerCallback::ObjectReferences 메서드에 의해 지정되는 멤버 필드 참조를 통해 관리되는 프로파일러가 라이브 개체의 전체 개체 그래프를 생성할 수 있습니다.
요구 사항
플랫폼:시스템 요구 사항을 참조하세요.
헤더: CorProf.idl, CorProf.h
.NET Framework 버전: 4.5부터 사용 가능
참고 항목
.NET