Partilhar via


Método ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod

Devolve um enumerador a todos os métodos definidos num determinado módulo NGen e inline num determinado método.

Sintaxe

HRESULT EnumNgenModuleMethodsInliningThisMethod(
        [in] ModuleID inlinersModuleId,
        [in] ModuleID inlineeModuleId,
        [in] mdMethodDef inlineeMethodId,
        [out] BOOL *incompleteData,
        [out] ICorProfilerMethodEnum** ppEnum
);

Parâmetros

inlinersModuleId
[in] O identificador de um módulo NGen.

inlineeModuleId
[in] O identificador de um módulo que define inlineeMethodId. Consulte a secção Observações para obter mais informações.

inlineeMethodId
[in] O identificador de um método indicado. Consulte a secção Observações para obter mais informações.

incompleteData
[fora] Um sinalizador que indica se ppEnum contém todos os métodos que inlineam um determinado método. Consulte a secção Observações para obter mais informações.

ppEnum
[fora] Um ponteiro para o endereço de um enumerador

Observações

inlineeModuleId e inlineeMethodId , em conjunto, formam o identificador completo do método que pode ser indicado. Por exemplo, suponha que o módulo A define um método Simple.Add:

Simple.Add(int a, int b)
{ return a + b; }

e o módulo B define Fancy.AddTwice:

Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }

Vamos também assumir que Fancy.AddTwice inlines a chamada para SimpleAdd. Um gerador de perfis pode utilizar este enumerador para localizar todos os métodos definidos no módulo B que inline Simple.Adde o resultado enumerariam AddTwice. inlineeModuleId é o identificador do módulo Ae inlineeMethodId é o identificador de Simple.Add(int a, int b).

Se incompleteData for verdadeiro após a função devolver, o enumerador não contém todos os métodos que inlineem um determinado método. Isto pode acontecer quando uma ou mais dependências diretas ou indiretas do módulo inliners ainda não foram carregadas. Se um gerador de perfis precisar de dados precisos, deverá tentar novamente mais tarde quando forem carregados mais módulos, de preferência em cada carregamento de módulo.

O EnumNgenModuleMethodsInliningThisMethod método pode ser utilizado para contornar as limitações de inlining do ReJIT. O ReJIT permite que um gerador de perfis altere a implementação de um método e, em seguida, crie um novo código para o mesmo de imediato. Por exemplo, podemos alterar da Simple.Add seguinte forma:

Simple.Add(int a, int b)
{ return 42; }

No entanto, como Fancy.AddTwice já inlineou Simple.Add, continua a ter o mesmo comportamento que antes. Para contornar essa limitação, o autor da chamada tem de procurar todos os métodos em todos os módulos inline Simple.Add e utilizados ICorProfilerInfo5::RequestRejit em cada um desses métodos. Quando os métodos forem compilados novamente, terão o novo comportamento de Simple.Add em vez do comportamento antigo.

Requisitos

Plataformas: Veja Requisitos de Sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: Disponível desde a versão 4.6

Ver também