다음을 통해 공유


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, valueRefIdsrootIds 배열의 요소 수입니다.

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 메서드가 지정하는 종속성을 기록합니다. ICorProfilerCallback5ConditionalWeakTable 항목으로 표시되는 라이브 개체 간의 전체 종속성 집합을 제공합니다. 이러한 종속성과 ICorProfilerCallback::ObjectReferences 메서드에 의해 지정되는 멤버 필드 참조를 통해 관리되는 프로파일러가 라이브 개체의 전체 개체 그래프를 생성할 수 있습니다.

요구 사항

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

헤더: CorProf.idl, CorProf.h

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

참고 항목