Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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