TargetedPatchingOptOut : "NGen 이미지 경계를 가로 질러 인라인하는 데 중요한 성능"?


140

리플렉터를 사용하여 일부 프레임 워크 클래스를 살펴보고 많은 메소드와 속성에 다음과 같은 속성이 있음을 알았습니다.

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

나는 또한 위의 주석을 다른 곳에서 보았고 결코 따라 한 적이 없다고 확신합니다.

누군가 C # 및 다른 컨텍스트에서 이것이 무엇을 의미하는지 말해 줄 수 있습니까?

답변:


176

NGen에 다른 어셈블리에서도 적용되는 메소드를 인라인해도된다고 알립니다.

예를 들면 다음과 같습니다.

  • String.Equals 있다 [TargetedPatchingOptOut]
  • 당신은 호출하는 프로그램을 작성 String.Equals
  • 최대 성능을 위해이 프로그램에서 NGen 을 실행 합니다.
  • NGen은 String.Equals메소드 호출 명령어를 메소드의 실제 코드로 대체 하여 호출 을 인라인합니다 .
    메소드 호출은 (약간) 비싸므로 자주 호출되는 메소드의 성능 향상입니다.

그러나 Microsoft 가의 보안 취약점을 발견하면 String.Equals업데이트 할 수 없습니다 mscorlib.dll. NGen'd의 어셈블리에는 영향을 미치지 않기 때문입니다. (참조하지 않고 원시 기계 코드가 있으므로 String.Equals).
이것이 실제로 발생한다면 보안 업데이트는 NGen 저장소를 지우는 것으로 가정합니다.

이 특성은 .NET Framework 어셈블리에서만 유용합니다. 당신은 자신의 필요가 없습니다. 이에 대한 자세한 정보는 https://stackoverflow.com/a/14982340/631802 에서 확인할 수 있습니다.


18
이 속성을 자체 프레임 워크에서 사용할 수 있습니까? 내 오픈 소스 라이브러리에는 다음과 같은 이점이있는 많은 수학 함수가 있습니다.
MattDavey

3
.NET 프레임 워크가 패치 된 경우 기존 네이티브 이미지 파일이 무효화되고 다시 생성됩니다 (적어도 이해합니다)
Motti

14
@MattDavey 아니요, 자신의 코드에서이 속성을 사용해서는 안됩니다. MSDN에 기록 된대로 : "이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다." 이 속성은 대상 패치를 사용하는 어셈블리에만 영향을줍니다. 일부 소스 링크에 대한 자세한 설명은 여기를 참조하십시오 : stackoverflow.com/a/14982340/631802
cremor

25
우리의 모든 코드가 자동으로이 속성을 의미 조립 경계에 걸쳐 인라인 될 수 있다는 사실은 우리에게 완전히 쓸모가 정말 ...이 질문에 대해 언급 할 필요가
BlueRaja - 대니 Pflughoeft을

4
@MattDavey 만약 가능하다면 메소드가 인라인되어야한다고 컴파일러에게 조금 알려주고 싶다면[MethodImpl(MethodImplOptions.AggressiveInlining)]
Basic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.