SuppressGCTransitionAttribute Kelas

Definisi

Menunjukkan bahwa transisi pengumpulan sampah harus dilewati ketika panggilan fungsi yang tidak dikelola dilakukan.

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
Warisan
SuppressGCTransitionAttribute
Atribut

Keterangan

Atribut ini diabaikan jika diterapkan ke metode tanpa DllImportAttribute.

Proses transisi ini dapat menghasilkan manfaat ketika biaya transisi lebih dari waktu eksekusi fungsi yang tidak dikelola. Namun, menghindari transisi ini menghapus beberapa jaminan yang diberikan runtime melalui P/Invoke normal. Ketika keluar dari runtime terkelola untuk memasuki fungsi yang tidak dikelola, GC harus beralih dari mode Kooperatif ke mode Preemptive. Detail lengkap tentang mode ini dapat ditemukan di https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Menekan transisi GC adalah skenario lanjutan dan tidak boleh dilakukan tanpa sepenuhnya memahami konsekuensi potensial.

Salah satu konsekuensi ini adalah dampak terhadap debugging mode Campuran. Selama debugging mode Campuran, tidak dimungkinkan untuk melangkah ke atau mengatur titik henti dalam P/Invoke yang telah ditandai dengan atribut ini. Solusinya adalah beralih ke penelusuran kesalahan asli dan mengatur titik henti dalam fungsi asli. Secara umum, penggunaan atribut ini tidak disarankan jika penelusuran kesalahan P/Invoke penting, misalnya, melangkah melalui kode asli atau mendiagnosis pengecualian yang dilemparkan dari kode asli.

Metode P/Invoke tempat atribut ini diterapkan harus memiliki semua properti berikut:

  • Fungsi asli selalu dijalankan untuk jumlah waktu sepele (kurang dari 1 mikro detik).
  • Fungsi asli tidak melakukan syscall pemblokiran (misalnya, semua jenis I/O).
  • Fungsi asli tidak memanggil kembali ke runtime (misalnya, Reverse P/Invoke).
  • Fungsi asli tidak melemparkan pengecualian.
  • Fungsi asli tidak memanipulasi kunci atau primitif konkurensi lainnya.

Konsekuensi dari penggunaan atribut ini yang tidak valid meliputi:

  • Kelaparan GC.
  • Penghentian runtime segera.
  • Kerusakan data.

Menerapkan atribut ini dapat menyebabkan ekspor P/Invoke terikat sebelumnya sebagai efek samping dari metode panggilan yang dikompilasi JIT. EntryPointNotFoundException atau pengecualian lain mungkin dilemparkan lebih awal daripada saat atribut tidak diterapkan.

Konstruktor

SuppressGCTransitionAttribute()

Konstruktor instans.

Properti

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)

Metode

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk