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] keyRefIds
、valueRefIds
和 rootIds
陣列中的項目數。
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 起可用