ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod 方法
將列舉程式傳回給指定 NGen 模組中定義的所有方法,並內嵌指定的方法。
語法
HRESULT EnumNgenModuleMethodsInliningThisMethod(
[in] ModuleID inlinersModuleId,
[in] ModuleID inlineeModuleId,
[in] mdMethodDef inlineeMethodId,
[out] BOOL *incompleteData,
[out] ICorProfilerMethodEnum** ppEnum
);
參數
inlinersModuleId
[in] NGen 模組的識別碼。
inlineeModuleId
[in] 定義 inlineeMethodId
之模組的識別碼。 如需詳細資訊,請參閱<備註>一節。
inlineeMethodId
[in] 內嵌方法的識別碼。 如需詳細資訊,請參閱<備註>一節。
incompleteData
[out] 旗標,指出 ppEnum
是否包含內嵌指定方法的所有方法。 如需詳細資訊,請參閱<備註>一節。
ppEnum
[out] 指向列舉程式位址的指標
備註
inlineeModuleId
和 inlineeMethodId
會一起針對可能內嵌的方法形成完整識別碼。 例如,假設模組 A
會定義 Simple.Add
方法:
Simple.Add(int a, int b)
{ return a + b; }
而模組 B 會定義 Fancy.AddTwice
:
Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }
也假設 Fancy.AddTwice
會內嵌向 SimpleAdd
發出的呼叫。 分析工具可以使用此列舉程式來尋找模組 B 中所定義且內嵌 Simple.Add
的所有方法,而結果會列舉 AddTwice
。 inlineeModuleId
是 A
模組的識別碼,而 inlineeMethodId
是 Simple.Add(int a, int b)
的識別碼。
如果函式傳回之後 incompleteData
為 true,則列舉程式不會包含內嵌指定方法的所有方法。 當內嵌模組的一個或多個直接或間接相依性未載入時,就會發生這種情況。 如果分析工具需要精確的資料,則應在載入更多模組後重試,且最好在每個模組負載上重試。
EnumNgenModuleMethodsInliningThisMethod
方法可用來解決 ReJIT 的內嵌限制。 ReJIT 可讓分析工具變更方法的實作,然後即時為其建立新的程式碼。 例如,我們可以變更 Simple.Add
,如下所示:
Simple.Add(int a, int b)
{ return 42; }
不過,因為 Fancy.AddTwice
已經內嵌 Simple.Add
,所以其仍會繼續具有與先前相同的行為。 若要解決該限制,呼叫端必須在內嵌 Simple.Add
的所有模組中搜尋所有方法,並在其中每個方法上使用 ICorProfilerInfo5::RequestRejit
。 當方法重新編譯時,這些方法就會有新的 Simple.Add
行為,而不是舊的行為。
規格需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework版本:自 4.6 起可用