Persyaratan: Saat melihat kode sumber .NET, saya menemukan bahwa beberapa metode telah menambahkan fitur [MethodImpl(MethodImplOptions.AggressiveInlining)], tetapi saya melihat bahwa fitur MethodImpl dapat memengaruhi perilaku kompiler JIT. Beberapa tes dilakukan berdasarkan informasi di Internet.
Konfigurasi MethodImplOptions
Kode:
Fungsi sebaris
Dalam ilmu komputer, fungsi inline (kadang-kadang disebut fungsi online atau fungsi ekspansi waktu kompilasi) adalah konstruksi bahasa pemrograman yang digunakan untuk menyarankan bahwa ekstensi inline kompiler (kadang-kadang disebut ekstensi online) ke beberapa fungsi khusus; Ini berarti bahwa kompiler menyisipkan dan mengganti isi fungsi yang ditentukan sebagai pengganti setiap tempat (konteks) tempat fungsi dipanggil, menghemat waktu tambahan yang dihabiskan pada setiap panggilan ke fungsi. Namun, ketika memilih untuk menggunakan fungsi inline, perlu untuk menimbang ruang yang ditempati oleh program dan efisiensi eksekusi program, karena terlalu banyak fungsi kompleks untuk ekspansi inline akan membawa biaya sumber daya penyimpanan yang besar. Penting juga untuk dicatat bahwa ekstensi sebaris dari fungsi rekursif dapat menyebabkan kompilasi tak terbatas dari beberapa kompiler.
MetodeImplOpsi.AgresifInlining
Fungsi: Disarankan agar kompiler JIT menyebarkan metode sebanyak mungkin. Penjelasan: Inline mengacu pada penggantian panggilan fungsi dengan isi fungsi itu sendiri, sehingga mengurangi overhead panggilan fungsi. Skenario yang berlaku: Cocok untuk metode kecil yang sering disebut (misalnya, pengakses atribut, perhitungan matematika sederhana, dll.). Catatan: Ini hanya "saran", kompiler JIT dapat memutuskan apakah akan benar-benar sebaris atau tidak, tergantung pada situasi aktual.
Hasil tes "inline" dan "not inline" adalah sebagai berikut:
Kode pengujiannya adalah sebagai berikut:
Ditemukan bahwa penggunaan CPU setelah inline jauh lebih rendah daripada panggilan non-inline, pada kenyataannya, jugaJangan terlalu cemas, compiler saat ini sangat pintar, bahkan tanpa menambahkan fitur ini, compiler dapat membantu Anda mengoptimalkan secara otomatis。 |