Compartilhar via


Método ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod

Retorna um enumerador para todos os métodos definidos em um determinado módulo NGen e embutido em um 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 seção Comentários para obter mais informações.

inlineeMethodId
[in] O identificador de um módulo embutido. Consulte a seção Comentários para obter mais informações.

incompleteData
[out] Um sinalizador que indica se ppEnum contém todos os métodos que embutem um determinado método. Consulte a seção Comentários para obter mais informações.

ppEnum
[out] Um ponteiro ao endereço do enumerador

Comentários

inlineeModuleId e inlineeMethodId juntos formam o identificador completo para o método que pode ser embutido. Por exemplo, suponha que o módulo A defina um método Simple.Add:

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

e o módulo B defina Fancy.AddTwice:

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

Também vamos supor que Fancy.AddTwice embute a chamada para SimpleAdd. Um criador de perfil poderia usar esse enumerador para localizar todos os métodos definidos no módulo B, que está embutido Simple.Add, e o resultado enumeraria AddTwice. inlineeModuleId é o identificador do módulo Ae inlineeMethodId é o identificador de Simple.Add(int a, int b).

Se incompleteData for verdadeiro após o retorno da função, o enumerador não conterá todos os métodos que embutem um determinado método. Isso pode acontecer quando uma ou mais dependências diretas ou indiretas do módulo embutidos ainda não tiverem sido carregadas. Se um criador de perfil precisar de dados precisos, ele deverá tentar novamente mais tarde quando mais módulos forem carregados, de preferência em cada carga de módulo.

O método EnumNgenModuleMethodsInliningThisMethod pode ser usado para contornar as limitações de embutimento para ReJIT. O ReJIT permite que um criador de perfil altere a implementação de um método e, em seguida, crie um novo código para ele em tempo real. Por exemplo, podemos alterar Simple.Add da seguinte maneira:

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

No entanto, como Fancy.AddTwice já foi embutido Simple.Add, ele continua a ter o mesmo comportamento de antes. Para contornar essa limitação, o chamador precisa pesquisar todos os métodos em todos os módulos Simple.Add embutidos e usar ICorProfilerInfo5::RequestRejit em cada um desses métodos. Quando os métodos forem compilados novamente, eles terão o novo comportamento de Simple.Add, em vez do comportamento antigo.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: disponíveis desde 4.6

Confira também