SuppressGCTransitionAttribute 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
비관리형 함수 호출이 수행될 때 가비지 수집 전환을 건너뛰어야 함을 나타냅니다.
public ref class SuppressGCTransitionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class SuppressGCTransitionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type SuppressGCTransitionAttribute = class
inherit Attribute
Public NotInheritable Class SuppressGCTransitionAttribute
Inherits Attribute
- 상속
- 특성
설명
이 특성은 가 없는 DllImportAttribute메서드에 적용되는 경우 무시됩니다.
이 전환을 포기하면 전환 비용이 관리되지 않는 함수의 실행 시간보다 많은 경우 이점을 얻을 수 있습니다. 그러나 이 전환을 방지하면 런타임이 일반 P/Invoke를 통해 제공하는 일부 보장이 제거됩니다. 관리되는 런타임을 종료하여 관리되지 않는 함수를 입력할 때 GC는 협동 모드에서 선점 모드로 전환해야 합니다. 이러한 모드에 대한 자세한 내용은 에서 https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8확인할 수 있습니다. GC 전환을 표시하지 않는 것은 고급 시나리오이며 잠재적인 결과를 완전히 이해하지 않으면 안 됩니다.
이러한 결과 중 하나는 혼합 모드 디버깅에 미치는 영향입니다. 혼합 모드 디버깅 중에는 이 특성으로 표시된 P/Invoke에서 중단점을 한 단계씩 실행하거나 설정할 수 없습니다. 해결 방법은 네이티브 디버깅으로 전환하고 네이티브 함수에서 중단점을 설정하는 것입니다. 일반적으로 P/Invoke 디버깅이 중요한 경우(예: 네이티브 코드를 단계별로 실행하거나 네이티브 코드에서 throw된 예외를 진단하는 경우) 이 특성을 사용하지 않는 것이 좋습니다.
이 특성이 적용되는 P/Invoke 메서드에는 다음 속성이 모두 있어야 합니다.
- 네이티브 함수는 항상 간단한 시간(1 마이크로초 미만)에 대해 실행됩니다.
- 네이티브 함수는 차단 syscall을 수행하지 않습니다(예: 모든 형식의 I/O).
- 네이티브 함수는 런타임으로 다시 호출하지 않습니다(예: 역방향 P/Invoke).
- 네이티브 함수는 예외를 throw하지 않습니다.
- 네이티브 함수는 잠금 또는 기타 동시성 기본 형식을 조작하지 않습니다.
이 특성의 잘못된 사용 결과는 다음과 같습니다.
- GC 기아.
- 즉시 런타임 종료.
- 데이터 손상.
이 특성을 적용하면 P/Invoke 내보내기가 JIT 컴파일되는 호출 메서드의 부작용으로 더 일찍 바인딩될 수 있습니다. EntryPointNotFoundException 또는 다른 예외가 특성이 적용되지 않은 경우보다 일찍 throw될 수 있습니다.
생성자
SuppressGCTransitionAttribute() |
인스턴스 생성자입니다. |
속성
TypeId |
파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다. (다음에서 상속됨 Attribute) |
메서드
Equals(Object) |
이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다. (다음에서 상속됨 Attribute) |
GetHashCode() |
이 인스턴스의 해시 코드를 반환합니다. (다음에서 상속됨 Attribute) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
IsDefaultAttribute() |
파생 클래스에서 재정의된 경우 이 인스턴스 값이 파생 클래스에 대한 기본값인지 여부를 표시합니다. (다음에서 상속됨 Attribute) |
Match(Object) |
파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (다음에서 상속됨 Attribute) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
.NET