共用方式為


ICorProfilerCallback5::ConditionalWeakTableElementReferences 方法

識別那些根目錄透過直接成員欄位參考以及透過 ConditionalWeakTable 相依性來參考之物件的可轉移結束。

語法

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] keyRefIdsvalueRefIdsrootIds 陣列中的項目數。

keyRefIds
[in] 物件 ID 陣列,針對相依性控制代碼配對中的主要項目,各包含一個 ObjectID

valueRefIds
[in] 物件 ID 陣列,針對相依性控制代碼配對中的次要項目,各包含一個 ObjectID。 (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 起可用

另請參閱