언어/C#

MethodImpl

에린_1 2024. 8. 6. 09:40
728x90

MethodImpl

  • Methodlmpl 특성(attribute)은 .NET에서 메서드의 구현 방식이나 특정 기능을 지정하는 데 사용된다. 이 특성은 주로 성능 최적화, 동기화, 인라인(inline) 규칙 등을 제어하기 위해 사용된다.
  • MethodImplAttribute는 System.Runtime.CompilerServices 네임스페이스에 정의되어 있으며, 메서드, 생성자 또는 속성 접근자에 적용할 수 있다.

주요 MethodImplOptions 값

  • NoInlining
    • 메서드가 JIT(Just-In-Time) 컴파일러에 의해 인라인되지 않도록 한다. 인라인은 메서드 호출을 메서드 본문으로 대체하는 최적화 기술이다.
  • AggressiveInlining
    • JIT 컴파일러가 가능하면 메서드를 인라인하려고 시도하도록 한다. 이는 성능을 극대화하기 위해 사용될 수 있다.
  • Synchronized
    • 메서드에 대한 접근이 스레드 안전하게 보장된다. 해당 메서드가 호출될 때 자동으로 lock(this)와 같은 방식으로 동기화된다. 그러나 성능 저하와 교착 상태(deadlock)의 위험이 있으므로 일반적으로 권장되지 않는다.
  • InternalCall
    • 메서드 구현이 네이티브 코드에 있으며, 런타임에 의해 호출될 때 실행된다. 일반적으로 CLR의 내부 메서드에 사용된다.
  • ForwardRef
    • 메서드가 나중에 제공될 것임을 나타낸다. 메서드의 실제 구현은 제공되지 않으며, 주로 런타임이 이 기능을 사용할 수 있다.
  • PreserveSig
    • 메서드의 서명이 그대로 유지되도록 지정한다. COM 상호 운용 시, HRESULT 반환 값을 유지하기 위해 사용된다.

주의 사항

  • MethodImplOptions.Synchronized는 모든 메서드 호출에 대해 잠금을 설정하므로, 동시성 문제를 해결할 수 있지만 성능에 부정적인 영향을 미칠 수 있다. 가능하면 lock문을 사용하여 명시적인 잠금 관리가 더 바람직하다.
  • AggressiveInlining 및 NoInlining은 JIT 컴파일러에 대한 힌트일 뿐, 반드시 이러한 방식으로 컴파일되도록 보장하지는 않는다.
728x90

'언어 > C#' 카테고리의 다른 글

확장 메서드(Extension Method)  (0) 2024.08.06
bool 함수<TEnum>(this TEnum, params TEnum[])  (0) 2024.08.06
Static extern  (0) 2024.08.06
Environment.ProcessorCount  (0) 2024.08.06
HashSet<T>  (0) 2024.08.05