SuppressGCTransitionAttribute Kelas

Definisi

Menunjukkan bahwa transisi pengumpulan sampah harus dilewati ketika panggilan fungsi yang tidak terkelola 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.

Melakukan 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. Saat keluar dari runtime terkelola untuk memasukkan fungsi yang tidak dikelola, GC harus beralih dari mode Koperasi 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 potensi konsekuensi.

Salah satu konsekuensi ini adalah dampak pada 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 waktu yang sepele (kurang dari 1 mikrosekon).
  • 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 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 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 yang saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk