Mengingat kosong metode tubuh, akan JIT mengoptimalkan keluar panggilan (aku tahu C# compiler tidak't). Bagaimana saya pergi tentang mencari tahu? Alat apa yang harus saya gunakan dan mana yang harus saya cari?
Karena saya'm yakin itu'akan bertanya, alasan kosong metode preprocessor directive.
@Chris: Masuk akal, tapi itu bisa mengoptimalkan keluar panggilan ke metode. Jadi metode ini masih akan ada, tapi statis panggilan untuk itu bisa dihapus (atau setidaknya inline...)
@Jon: Itu hanya memberitahu saya compiler bahasa doesn't melakukan apa-apa. Saya pikir apa yang saya perlu lakukan adalah menjalankan saya dll melalui ngen dan melihat perakitan.
Chap ini telah cukup baik pengobatan JIT optimisations, melakukan pencarian pada halaman untuk 'metode kosong', it's sekitar setengah jalan ke bawah artikel -
http://www.codeproject.com/KB/dotnet/JITOptimizations.aspx
Rupanya metode yang kosong tidak bisa dioptimalkan melalui inlining apa yang efektif tidak ada kode.
@Chris: aku tidak menyadari bahwa metode yang akan tetap menjadi bagian dari biner dan bahwa ini adalah JIT optimisations :-). Pada semi-catatan terkait, Scott Hanselman telah cukup sebuah artikel menarik di inlining dalam Rilis membangun tumpukan panggilan:
I'm menebak kode anda seperti:
void DoSomethingIfCompFlag() {
#if COMPILER_FLAG
//your code
#endif
}
Ini won't mendapatkan dioptimalkan keluar, namun:
partial void DoSomethingIfCompFlag();
#if COMPILER_FLAG
partial void DoSomethingIfCompFlag() {
//your code
}
#endif
Pertama kosong metode parsial, dan C#3 compiler akan mengoptimalkan itu.
By the way: ini pada dasarnya adalah apa yang parsial metode untuk. Microsoft menambahkan kode generator untuk mereka Linq desainer yang perlu memanggil metode yang secara default don't melakukan apa-apa.
Daripada memaksa anda untuk membebani metode yang dapat anda gunakan parsial.
Cara ini parsial adalah benar-benar dioptimalkan keluar jika tidak digunakan dan tidak ada kinerja yang hilang, daripada menambahkan overhead tambahan kosong metode panggilan.
Tidak, metode yang kosong yang tidak pernah dioptimalkan keluar. Berikut ini adalah beberapa alasan mengapa:
Edit: Ya, dari melihat bahwa (exellent) kode proyek doc JITer akan menghilangkan panggilan ke metode yang kosong. Tetapi metode sendiri masih akan disusun dan bagian dari biner anda untuk alasan yang saya terdaftar.
Semua hal yang sama, ya itu harus dioptimalkan keluar. JIT inlines fungsi-fungsi mana yang sesuai dan ada beberapa hal yang lebih tepat dari fungsi kosong :)
Jika anda benar-benar ingin pastikan kemudian mengubah anda kosong metode untuk melemparkan pengecualian dan mencetak stack trace yang dikandungnya.