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.Add
e o resultado enumerariam 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 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