ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod 메서드

지정된 NGen 모듈에 정의되고 지정된 메서드를 인라인하는 모든 메서드에 대한 열거자를 반환합니다.

구문

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

매개 변수

inlinersModuleId
[in] NGen 모듈의 식별자입니다.

inlineeModuleId
[in] inlineeMethodId를 정의하는 모듈의 식별자입니다. 자세한 내용은 설명 부분을 참조하세요.

inlineeMethodId
[in] 인라인 메서드의 식별자입니다. 자세한 내용은 설명 부분을 참조하세요.

incompleteData
[out] ppEnum에 지정된 메서드를 인라인하는 모든 메서드가 포함되어 있는지 여부를 나타내는 플래그입니다. 자세한 내용은 설명 부분을 참조하세요.

ppEnum
[out] 열거자의 주소에 대한 포인터입니다.

설명

inlineeModuleIdinlineeMethodId는 함께 인라인될 수 있는 메서드의 전체 식별자를 구성합니다. 예를 들어 모듈 A가 메서드 Simple.Add를 정의한다고 가정합니다.

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

그리고 모듈 B는 Fancy.AddTwice를 정의합니다.

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

또한 Fancy.AddTwiceSimpleAdd 호출을 인라인한다고 가정하겠습니다. 프로파일러는 이 열거자를 사용하여 Simple.Add를 인라인하는 모듈 B에 정의된 모든 메서드를 찾을 수 있고 결과에는 AddTwice가 열거됩니다. inlineeModuleId는 모듈 A의 식별자이고 inlineeMethodIdSimple.Add(int a, int b)의 식별자입니다.

함수가 반환된 후 incompleteData가 true인 경우 true이면 열거자에는 지정된 메서드를 인라인하는 일부 메서드가 포함되지 않습니다. 이 문제는 인라이너 모듈의 직접 또는 간접 종속성 하나 이상이 아직 로드되지 않은 경우에 발생할 수 있습니다. 프로파일러에게 정확한 데이터가 필요한 경우 나중에 더 많은 모듈이 로드될 때(각 모듈 로드 시 권장) 다시 시도해야 합니다.

EnumNgenModuleMethodsInliningThisMethod 메서드는 ReJIT의 인라인에 대한 제한 사항을 해결하는 데 사용할 수 있습니다. ReJIT를 사용하면 프로파일러가 메서드 구현을 변경한 다음, 즉시 새 코드를 만들 수 있습니다. 예를 들어 다음과 같이 Simple.Add를 변경할 수 있습니다.

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

그러나 Fancy.AddTwiceSimple.Add를 이미 인라인했으므로 이전과 동일한 동작이 계속됩니다. 이 제한 사항을 해결하기 위해 호출자는 Simple.Add를 인라인하고 각각의 해당 메서드에서 ICorProfilerInfo5::RequestRejit를 사용하는 모든 모듈의 모든 메서드를 검색해야 합니다. 메서드를 다시 컴파일하면 이전 동작 대신 새 동작 Simple.Add가 적용됩니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

.NET Framework 버전: 4.6부터 사용 가능

참고 항목