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 則會忽略這個屬性。

當轉換的成本超過 Unmanaged 函式的執行時間時,放棄此轉換可能會帶來好處。 不過,避免此轉換會移除執行時間透過一般 P/Invoke 提供的一些保證。 結束 Managed 執行時間以進入 Unmanaged 函式時,GC 必須從合作模式轉換為先占模式。 如需這些模式的完整詳細資料,請參閱 https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8 。 隱藏 GC 轉換是進階案例,不應在完全瞭解潛在結果的情況下完成。

其中一個結果會影響 混合模式偵錯。 在混合模式偵錯期間,您無法在已標示此屬性的 P/Invoke 中逐步執行或設定中斷點。 因應措施是切換至原生偵錯,並在原生函式中設定中斷點。 一般而言,偵錯 P/Invoke 很重要時,不建議使用這個屬性,例如逐步執行機器碼或診斷從機器碼擲回的例外狀況。

套用此屬性的 P/Invoke 方法必須具有下列所有屬性:

  • 原生函式一律會執行一段時間, (小於 1 毫秒) 。
  • 原生函式不會執行封鎖 syscall (,例如任何類型的 I/O) 。
  • 原生函式不會回呼執行時間 (例如反向 P/Invoke) 。
  • 原生函式不會擲回例外狀況。
  • 原生函式不會操作鎖定或其他並行基本類型。

此屬性無效使用的結果包括:

  • GC 耗盡。
  • 立即執行時間終止。
  • 資料損毀。

套用這個屬性可能會導致 P/Invoke 匯出先前系結為 JIT 編譯之呼叫方法的副作用。 EntryPointNotFoundException 或其他例外狀況可能早于未套用 屬性時擲回。

建構函式

SuppressGCTransitionAttribute()

執行個體建構函式。

屬性

TypeId

在衍生類別中實作時,取得這個 Attribute 的唯一識別碼。

(繼承來源 Attribute)

方法

Equals(Object)

傳回值,這個值指出此執行個體是否與指定的物件相等。

(繼承來源 Attribute)
GetHashCode()

傳回這個執行個體的雜湊碼。

(繼承來源 Attribute)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
IsDefaultAttribute()

在衍生類別中覆寫時,表示這個執行個體的值是衍生類別的預設值。

(繼承來源 Attribute)
Match(Object)

在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。

(繼承來源 Attribute)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於