Tinjauan artikel tentang refleksi:
Tentang Ulasan EMIT:
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:
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!
|