Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 54151|Jawab: 3

[Sumber] Pengujian performa Refleksi, Emitsi, Ekspresi .NET/C#

[Salin tautan]
Dipaparkan pada 2021-3-21 13:23:34 | | | |
Tinjauan artikel tentang refleksi:

.net/c# memanfaatkan metode eksekusi dinamis refleksi
https://www.itsvse.com/thread-4771-1-1.html

C# menggunakan refleksi untuk menentukan apakah properti ditetapkan
https://www.itsvse.com/thread-3045-1-1.html

Refleksi C# mendapatkan nama tampilan properti objek
https://www.itsvse.com/thread-3219-1-1.html
Tentang Ulasan EMIT:

.NET/C# Emit secara dinamis menghasilkan rakitan
https://www.itsvse.com/thread-9597-1-1.html
Pertama, buat objek sederhana, buat instance objek, dan gunakan emit dan expression untuk membaca dan memodifikasi nilai objek, dan Anda dapat melihat bahwa hasil eksekusi seperti yang diharapkan, seperti yang ditunjukkan pada gambar di bawah ini:



Benchmark menggunakan BenchmarkDotNet untuk benchmarking, hanya membaca nilai objek untuk pengujian, berjalan di Net472 dan NetCoreApp31, hasil pengujian adalah sebagai berikut:


.NET/C# menggunakan BenchmarkDotNet untuk menguji performa kode
https://www.itsvse.com/thread-9576-1-1.html


Ringkasan:

Baik emit dan expression lebih efisien daripada menggunakan refleksi untuk mendapatkan nilai, dan di bawah kerangka kerja .NET 4.7.2, emit lebih baik daripada efisiensi eksekusi ekspresi, tetapi di bawah kerangka kerja .NET Core 3.1, ekspresi lebih baik daripada eksekusi emit.

Jika program Anda hanya perlu mengeksekusi objek secara dinamis sekali, disarankan untuk menggunakan refleksi (lagipula, tidak perlu merangkum lagi atau membuat delegasi), dan jika program Anda perlu mengeksekusi objek secara dinamis beberapa kali, disarankan untuk menggunakan emit atau expression, dan tentu saja, enkapsulasi lebih lanjut diperlukan.

Kode pengujiannya adalah sebagai berikut:

Saat menggunakan Expression untuk mendapatkan nilai objek, kesalahan akan dilaporkan sebagai berikut:

Ekspresi jenis 'System.Int32' tidak dapat digunakan untuk mengembalikan jenis 'System.Object'
Saya benar-benar tidak tahu bagaimana orang-orang ini menggunakannya, mereka hanya tahu cara menyalin dan menempel!




Mantan:.NET/C# Emit secara dinamis menghasilkan rakitan
Depan:.NET Core memanggil solusi kesalahan alamat gRPC HTTP (non-TLS protected)
 Tuan tanah| Dipaparkan pada 2025-4-28 14:53:41 |
Gunakan Ekspresi untuk menetapkan nilai ke properti objek:


Panggilan:
 Tuan tanah| Dipaparkan pada 2025-4-28 15:32:51 |
.NET/C# Menggunakan UnsafeAccessor untuk mengubah konten bidang baca-saja
https://www.itsvse.com/thread-10997-1-1.html
 Tuan tanah| Dipaparkan pada 2025-4-28 15:40:57 |
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com