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 遷移の抑制は高度なシナリオであり、潜在的な結果を完全に理解せずに行うべきではありません。

これらの結果の 1 つは、 混合モード デバッグへの影響です。 混合モードのデバッグ中に、この属性でマークされている P/Invoke にブレークポイントをステップインまたは設定することはできません。 回避策は、ネイティブ デバッグに切り替え、ネイティブ関数にブレークポイントを設定することです。 一般に、ネイティブ コードのステップ実行やネイティブ コードからスローされた例外の診断など、P/Invoke のデバッグが重要な場合は、この属性の使用は推奨されません。

この属性が適用される P/Invoke メソッドには、次のすべてのプロパティが必要です。

  • ネイティブ関数は、常に単純な時間 (1 マイクロ秒未満) で実行されます。
  • ネイティブ関数は、ブロック syscall (たとえば、任意の種類の I/O) を実行しません。
  • ネイティブ関数はランタイムにコールバックしません (例: Reverse P/Invoke)。
  • ネイティブ関数は例外をスローしません。
  • ネイティブ関数は、ロックやその他のコンカレンシー プリミティブを操作しません。

この属性の無効な使用の結果は次のとおりです。

  • GC の枯渇。
  • ランタイムの即時終了。
  • データの破損。

この属性を適用すると、呼び出し元のメソッドが JIT コンパイルされる副作用として、P/Invoke エクスポートが以前にバインドされる可能性があります。 EntryPointNotFoundException またはその他の例外は、 属性が適用されていない場合よりも前にスローされる可能性があります。

コンストラクター

SuppressGCTransitionAttribute()

インスタンス コンストラクター。

プロパティ

TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。

(継承元 Attribute)

メソッド

Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。

(継承元 Attribute)
GetHashCode()

このインスタンスのハッシュ コードを返します。

(継承元 Attribute)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。

(継承元 Attribute)
Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。

(継承元 Attribute)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象