다음을 통해 공유


SuppressGCTransitionAttribute 클래스

정의

비관리형 함수 호출이 수행될 때 가비지 수집 전환을 건너뛰어야 함을 나타냅니다.

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
상속
SuppressGCTransitionAttribute
특성

설명

이 특성은 가 없는 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)

적용 대상