次の方法で共有


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)

適用対象