Bagaimana kinerja dipengaruhi oleh direktif penggunaan yang tidak digunakan?


110

Visual Studio akan secara otomatis membuat pernyataan menggunakan untuk Anda setiap kali Anda membuat halaman atau proyek baru. Beberapa di antaranya tidak akan pernah Anda gunakan.

Visual Studio memiliki fitur yang berguna untuk "menghapus penggunaan yang tidak digunakan".

Saya ingin tahu apakah ada efek negatif pada kinerja program jika pernyataan yang menggunakan yang tidak pernah diakses, tetap disebutkan di bagian atas file.


Saya memang mencarinya sebelum bertanya, dan itu tidak muncul.
KdgDev

6
FWIW, posting ini memiliki SEO yang lebih baik: ini adalah hasil pertama di Google untuk saya. Dari 2 dokumen asli yang ditautkan, satu tidak tersedia (dihapus) dan yang lainnya diberi kata-kata yang cukup berbeda untuk menambah nilai pada posting ini, meskipun hanya sebagai pengalihan.
DaveD

@DaveD pertama untuk Anda karena Google tahu preferensi dan riwayat pencarian Anda. Di komputer teman saya itu bukan yang pertama.
ilias iliadis

Jawaban:


133

Penggunaan yang tidak digunakan tidak memengaruhi kinerja waktu proses aplikasi Anda.

Ini dapat memengaruhi kinerja IDE dan fase kompilasi keseluruhan. Alasan mengapa itu membuat namespace tambahan di mana resolusi nama harus terjadi. Namun ini cenderung kecil dan tidak akan berdampak nyata pada pengalaman IDE Anda untuk sebagian besar skenario.

Ini juga dapat mempengaruhi kinerja mengevaluasi ekspresi di debugger karena alasan yang sama.


38
Semakin banyak penggunaan, semakin lambat Intellisense
Riegardt Steyn

14

Tidak, itu hanya gaya kompilasi / waktu pengkodean. Biner .NET menggunakan nama yang sepenuhnya memenuhi syarat di bawah kap.


3
Apakah ini berarti bahwa nama kelas dan metode yang lebih panjang memiliki dampak yang kecil tetapi aktual (jika tidak dapat diukur) pada waktu kompilasi JIT?
Jared Updike

8

Tidak ada efek pada kecepatan eksekusi, tetapi mungkin ada sedikit efek pada kecepatan kompilasi / intellisense karena ada lebih banyak ruang nama potensial untuk mencari kelas yang tepat. Saya tidak akan terlalu khawatir tentang itu, tetapi Anda dapat menggunakan item menu Atur Penggunaan untuk menghapus dan mengurutkan pernyataan penggunaan.


8

Tautan berikut Bacaan yang baik tentang mengapa menghapus referensi yang tidak digunakan menjelaskan bagaimana berguna untuk menghapus referensi yang tidak digunakan dari aplikasi.

Berikut adalah beberapa kutipan dari tautan tersebut:

  1. Dengan menghapus referensi yang tidak digunakan dalam aplikasi Anda, Anda mencegah CLRpemuatan modul referensi yang tidak digunakan pada waktu proses. Artinya Anda akan mengurangi waktu startup aplikasi Anda, karena membutuhkan waktu untuk memuat setiap modul dan menghindari metadata pemuatan kompilator yang tidak akan pernah digunakan. Anda mungkin menemukan bahwa bergantung pada ukuran setiap pustaka, waktu startup Anda berkurang secara nyata. Ini tidak berarti bahwa aplikasi Anda akan lebih cepat setelah dimuat, tetapi akan sangat berguna untuk mengetahui bahwa waktu startup Anda mungkin berkurang.

  2. Manfaat lain dari menghapus referensi yang tidak digunakan adalah Anda akan mengurangi risiko konflik dengan namespace. Misalnya, jika Anda memiliki keduanya System.Drawingdan System.Web.UI.WebControlsmereferensikan, Anda mungkin menemukan bahwa Anda mengalami konflik saat mencoba mereferensikan Imagekelas. Jika Anda telah menggunakan direktif di kelas Anda yang cocok dengan referensi ini, compiler tidak dapat membedakan mana yang akan digunakan. Jika Anda secara teratur menggunakan pelengkapan otomatis saat mengembangkan, menghapus ruang nama yang tidak digunakan akan mengurangi jumlah nilai pelengkapan otomatis di editor teks saat Anda mengetik.


5

Tidak, ada beberapa proses yang terlibat saat menyusun program. Ketika kompilator mulai mencari referensi (kelas, metode), ia hanya akan menggunakan referensi yang digunakan pada kode. Direktif menggunakan hanya memberi tahu kompiler ke mana harus mencari. Banyak pernyataan using yang tidak terpakai mungkin memiliki masalah kinerja tetapi hanya pada waktu kompilasi. Saat runtime, semua kode luar ditautkan dengan benar atau disertakan sebagai bagian dari biner.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.