共用方式為


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] 指向列舉程式位址的指標

備註

inlineeModuleIdinlineeMethodId 會一起針對可能內嵌的方法形成完整識別碼。 例如,假設模組 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 的所有方法,而結果會列舉 AddTwiceinlineeModuleIdA 模組的識別碼,而 inlineeMethodIdSimple.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 起可用

另請參閱