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 |