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則會忽略這個屬性。
當轉換的成本超過 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) |