Delen via


Methode ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod

Retourneert een enumerator voor alle methoden die zijn gedefinieerd in een bepaalde NGen-module en inline een bepaalde methode.

Syntaxis

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

Parameters

inlinersModuleId
[in] De id van een NGen-module.

inlineeModuleId
[in] De id van een module die definieert inlineeMethodId. Zie de sectie Opmerkingen voor meer informatie.

inlineeMethodId
[in] De id van een inlined methode. Zie de sectie Opmerkingen voor meer informatie.

incompleteData
[uit] Een vlag die aangeeft of ppEnum alle methoden bevat die een bepaalde methode bevatten. Zie de sectie Opmerkingen voor meer informatie.

ppEnum
[uit] Een verwijzing naar het adres van een enumerator

Opmerkingen

inlineeModuleId en inlineeMethodId vormen samen de volledige id voor de methode die mogelijk is inlined. Stel dat module A een methode Simple.Adddefinieert:

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

en module B definieert Fancy.AddTwice:

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

We gaan er ook van uit dat Fancy.AddTwice de aanroep wordt inline naar SimpleAdd. Een profiler kan deze enumerator gebruiken om alle methoden te vinden die zijn gedefinieerd in module B, die inline Simple.Adden het resultaat opsommen AddTwice. inlineeModuleId is de id van module Aen inlineeMethodId is de id van Simple.Add(int a, int b).

Als incompleteData waar is nadat de functie is geretourneerd, bevat de enumerator niet alle methoden die een bepaalde methode bevatten. Dit kan gebeuren wanneer een of meer directe of indirecte afhankelijkheden van de inliners-module nog niet zijn geladen. Als een profiler nauwkeurige gegevens nodig heeft, moet deze het later opnieuw proberen wanneer er meer modules worden geladen, bij voorkeur bij elke modulebelasting.

De EnumNgenModuleMethodsInliningThisMethod methode kan worden gebruikt om beperkingen voor het inlijnen voor ReJIT te omzeilen. Met ReJIT kan een profiler de implementatie van een methode wijzigen en er vervolgens snel nieuwe code voor maken. We kunnen bijvoorbeeld als volgt wijzigen Simple.Add :

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

Omdat Fancy.AddTwice echter al is inlined Simple.Add, blijft het hetzelfde gedrag vertonen als voorheen. Om deze beperking te omzeilen, moet de aanroeper zoeken naar alle methoden in alle modules die inline Simple.Add zijn en op elk van deze methoden worden gebruikt ICorProfilerInfo5::RequestRejit . Wanneer de methoden opnieuw worden gecompileerd, hebben ze het nieuwe gedrag van Simple.Add in plaats van het oude gedrag.

Vereisten

Platforms: Zie Systeemvereisten.

Header: CorProf.idl, CorProf.h

Bibliotheek: CorGuids.lib

.NET Framework versies: beschikbaar sinds 4.6

Zie ook