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] 열거자의 주소에 대한 포인터입니다.
설명
inlineeModuleId
및 inlineeMethodId
는 함께 인라인될 수 있는 메서드의 전체 식별자를 구성합니다. 예를 들어 모듈 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.AddTwice
가 SimpleAdd
호출을 인라인한다고 가정하겠습니다. 프로파일러는 이 열거자를 사용하여 Simple.Add
를 인라인하는 모듈 B에 정의된 모든 메서드를 찾을 수 있고 결과에는 AddTwice
가 열거됩니다. inlineeModuleId
는 모듈 A
의 식별자이고 inlineeMethodId
는 Simple.Add(int a, int b)
의 식별자입니다.
함수가 반환된 후 incompleteData
가 true인 경우 true이면 열거자에는 지정된 메서드를 인라인하는 일부 메서드가 포함되지 않습니다. 이 문제는 인라이너 모듈의 직접 또는 간접 종속성 하나 이상이 아직 로드되지 않은 경우에 발생할 수 있습니다. 프로파일러에게 정확한 데이터가 필요한 경우 나중에 더 많은 모듈이 로드될 때(각 모듈 로드 시 권장) 다시 시도해야 합니다.
EnumNgenModuleMethodsInliningThisMethod
메서드는 ReJIT의 인라인에 대한 제한 사항을 해결하는 데 사용할 수 있습니다. ReJIT를 사용하면 프로파일러가 메서드 구현을 변경한 다음, 즉시 새 코드를 만들 수 있습니다. 예를 들어 다음과 같이 Simple.Add
를 변경할 수 있습니다.
Simple.Add(int a, int b)
{ return 42; }
그러나 Fancy.AddTwice
가 Simple.Add
를 이미 인라인했으므로 이전과 동일한 동작이 계속됩니다. 이 제한 사항을 해결하기 위해 호출자는 Simple.Add
를 인라인하고 각각의 해당 메서드에서 ICorProfilerInfo5::RequestRejit
를 사용하는 모든 모듈의 모든 메서드를 검색해야 합니다. 메서드를 다시 컴파일하면 이전 동작 대신 새 동작 Simple.Add
가 적용됩니다.
요구 사항
플랫폼:시스템 요구 사항을 참조하세요.
헤더: CorProf.idl, CorProf.h
라이브러리: CorGuids.lib
.NET Framework 버전: 4.6부터 사용 가능
참고 항목
.NET