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 A
e 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