SuppressGCTransitionAttribute Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- Atribut
Keterangan
Atribut ini diabaikan jika diterapkan ke metode tanpa DllImportAttribute.
Transisi ini yang sudah berlangsung 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 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 pada debugging mode Campuran. Selama penelusuran kesalahan Mode campuran, tidak dimungkinkan untuk masuk 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 debugging 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 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 dari penggunaan atribut ini yang tidak valid meliputi:
- GC kelaparan.
- Penghentian runtime segera.
- Kerusakan data.
Menerapkan atribut ini dapat menyebabkan ekspor P/Invoke terikat lebih awal sebagai efek samping dari metode panggilan yang dikompilasi JIT. EntryPointNotFoundException atau pengecualian lain mungkin dilemparkan lebih awal daripada saat atribut tidak diterapkan.
Konstruktor
| Nama | Deskripsi |
|---|---|
| SuppressGCTransitionAttribute() |
Konstruktor instans. |
Properti
| Nama | Deskripsi |
|---|---|
| TypeId |
Ketika diimplementasikan dalam kelas turunan, mendapatkan pengidentifikasi unik untuk Attributeini. (Diperoleh dari Attribute) |
Metode
| Nama | Deskripsi |
|---|---|
| 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 Type instans saat ini. (Diperoleh dari Object) |
| IsDefaultAttribute() |
Ketika ditimpa dalam kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan. (Diperoleh dari Attribute) |
| Match(Object) |
Saat ditimpa dalam kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu. (Diperoleh dari Attribute) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |