Partager via


ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod, méthode

Retourne un énumérateur à toutes les méthodes qui sont définies dans un module NGen donné et qui « inlinent » une méthode donnée.

Syntaxe

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

Paramètres

inlinersModuleId
[in] Identificateur d’un module NGen.

inlineeModuleId
[in] Identificateur d’un module qui définit inlineeMethodId. Pour plus d'informations, consultez la section Notes.

inlineeMethodId
[in] Identificateur d’une méthode inlined. Pour plus d'informations, consultez la section Notes.

incompleteData
[out] Indicateur qui indique si ppEnum contient toutes les méthodes qui « inlinent » une méthode donnée. Pour plus d'informations, consultez la section Notes.

ppEnum
[out] Pointeur vers l’adresse d’un énumérateur

Notes

inlineeModuleId et inlineeMethodId forment ensemble l’identificateur complet de la méthode qui peut être « inlined ». Par exemple, supposons que le module A définisse une méthode Simple.Add :

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

et que le module B définisse Fancy.AddTwice :

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

Supposons également que Fancy.AddTwice « inline » l’appel à SimpleAdd. Un profileur peut utiliser cet énumérateur pour rechercher toutes les méthodes définies dans le module B qui « inlinent » Simple.Add. Le résultat énumérerait AddTwice. inlineeModuleId est l’identificateur du module A, et inlineeMethodId est l’identificateur de Simple.Add(int a, int b).

Si incompleteData est vrai après le retour de la fonction, c’est que l’énumérateur ne contient pas toutes les méthodes qui « inlinent » une méthode donnée. Cela peut se produire lorsqu’une ou plusieurs dépendances directes ou indirectes du module inliners n’ont pas encore été chargées. Si un profileur a besoin de données précises, il doit réessayer plus tard quand d’autres modules auront été chargés, de préférence à chaque chargement de module.

La méthode EnumNgenModuleMethodsInliningThisMethod peut être utilisée pour contourner les limitations relatives à l’inlining pour ReJIT. ReJIT permet à un profileur de modifier l’implémentation d’une méthode, puis de créer du code pour celle-ci à la volée. Par exemple, nous pourrions modifier Simple.Add de la façon suivante :

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

Toutefois, étant donné que Fancy.AddTwice a déjà « inliné » Simple.Add, il continue d’avoir le même comportement que précédemment. Pour contourner cette limitation, l’appelant doit rechercher toutes les méthodes de tous les modules qui « inlinent » Simple.Add et utiliser ICorProfilerInfo5::RequestRejit sur chacune de ces méthodes. Lorsque les méthodes seront recompilées, elles auront le nouveau comportement de Simple.Add au lieu de l’ancien comportement.

Spécifications

Plateformes : Consultez Configuration requise.

En-tête : CorProf.idl, CorProf.h

Bibliothèque : CorGuids.lib

Versions de .NET Framework : disponibles depuis la version 4.6

Voir aussi