Mengapa Anda harus menghapus C # yang tidak perlu menggunakan arahan?

216

Sebagai contoh, saya jarang membutuhkan:

using System.Text;

tapi selalu ada di sana secara default. Saya menganggap aplikasi akan menggunakan lebih banyak memori jika kode Anda mengandung arahan yang tidak perlu . Tetapi apakah ada hal lain yang harus saya waspadai?

Juga, apakah itu membuat perbedaan apa pun jika menggunakan direktif yang sama digunakan hanya dalam satu file vs sebagian besar / semua file?


Sunting: Perhatikan bahwa pertanyaan ini bukan tentang konsep yang tidak terkait yang disebut pernyataan menggunakan , yang dirancang untuk membantu seseorang mengelola sumber daya dengan memastikan bahwa ketika suatu objek keluar dari ruang lingkup, metode IDisposable.Dispose -nya disebut. Lihat Penggunaan "menggunakan" di C # .

steffenj
sumber

Jawaban:

181

Itu tidak akan mengubah apa pun saat program Anda berjalan. Semua yang dibutuhkan dimuat sesuai permintaan. Jadi, bahkan jika Anda memiliki pernyataan menggunakan itu, kecuali jika Anda benar-benar menggunakan jenis dalam namespace / assembly tersebut, perakitan yang menggunakan pernyataan tersebut berkorelasi dengan tidak akan dimuat.

Terutama, itu hanya untuk membersihkan preferensi pribadi.

Darren Kopp
sumber
@ Francip - itulah yang saya katakan. menggunakan tidak mempengaruhi memuat perakitan, perakitan tidak dimuat sampai jenis yang terkandung dalam perakitan dirujuk.
Darren Kopp
69
tetapi dapat mempengaruhi waktu kompilasi dan respons Intellisense / IDE.
Marchy
Franci / FlySwat
JohnB
475

Ada yang beberapa alasan untuk menghapus yang tidak terpakai menggunakan (s) / ruang nama, selain coding preferensi:

  • menghapus klausa yang tidak digunakan dalam suatu proyek, dapat membuat kompilasi lebih cepat karena kompiler memiliki lebih sedikit ruang nama untuk mencari jenis yang harus diselesaikan. (ini terutama berlaku untuk C # 3.0 karena metode ekstensi, di mana kompiler harus mencari semua ruang nama untuk metode ekstensi untuk kemungkinan kecocokan yang lebih baik, inferensi tipe generik dan ekspresi lambda yang melibatkan tipe generik)
  • berpotensi dapat membantu untuk menghindari tabrakan nama di build mendatang ketika tipe baru ditambahkan ke ruang nama yang tidak digunakan yang memiliki nama yang sama dengan beberapa tipe di ruang nama yang digunakan.
  • akan mengurangi jumlah item dalam daftar penyelesaian otomatis editor saat coding, kemungkinan mengarah ke pengetikan yang lebih cepat (dalam C # 3.0 ini juga dapat mengurangi daftar metode ekstensi yang ditunjukkan)

Apa yang tidak akan dilakukan menghapus ruang nama yang tidak digunakan :

  • mengubah output kompiler dengan cara apa pun.
  • mengubah dengan cara apa pun pelaksanaan program yang dikompilasi (memuat lebih cepat, atau kinerja yang lebih baik).

Rakitan yang dihasilkan sama dengan atau tanpa penggunaan yang tidak digunakan dilepas.

Pop Catalin
sumber
3
Dan saat Anda memodifikasi file, Anda akhirnya akan menambahkan semakin banyak ruang nama ke awal file. Jadi, jika Anda tidak menghapus ruang nama yang tidak digunakan, saat Anda membuka file, semua yang Anda lihat adalah daftar ruang nama raksasa alih-alih implementasi yang sebenarnya.
Mert Akcakaya
5
Mengenai kompilasi yang lebih cepat: usingArahan yang tidak digunakan dalam .csfile dapat mencegah Anda menghapus beberapa referensi perakitan (jika tidak digunakan) dari .csprojproyek Anda . Jika Anda memiliki "solusi" dari banyak proyek, referensi yang tidak perlu antara proyek akan memaksa proyek untuk dikompilasi dalam urutan tertentu padahal sebenarnya mereka independen dan dapat dikompilasi secara paralel. Jadi hapus usingarahan yang tidak digunakan sebelum Anda memeriksa referensi proyek yang tidak digunakan dalam beberapa solusi proyek.
Jeppe Stig Nielsen
1
Ini adalah penjelasan yang bagus - pada akhirnya itu tidak ada hubungannya dengan kinerja tetapi praktik terbaik. Terima kasih telah menjelaskan!
GSaunders
39

Kode kebersihan adalah penting.

Kita mulai merasakan bahwa kode itu mungkin tidak terawat dan berada di jalur alis ketika kita melihat penggunaan berlebihan. Intinya, ketika saya melihat beberapa pernyataan yang tidak digunakan, bendera kuning muncul di bagian belakang otak saya mengatakan kepada saya untuk "melanjutkan dengan hati-hati." Dan membaca kode produksi seharusnya tidak pernah memberi Anda perasaan itu.

Jadi bersihkan barangmu. Jangan ceroboh. Menginspirasi kepercayaan diri. Buat kode Anda cantik. Berikan dev lain itu perasaan hangat-kabur.

inti
sumber
Nah, itu yang ingin saya dengar :-) Saya terbiasa melakukan Organize Usings -> Remove and Sortsesekali. BTW, bagi saya dua opsi teratas Organize Usingstidak ada artinya. Saya berbicara tentang VS2013 btw.
Sнаđошƒаӽ
30

Tidak ada konstruksi IL yang sesuai using. Dengan demikian, usingpernyataan tidak menambah memori aplikasi Anda, karena tidak ada kode atau data yang dihasilkan untuk itu.

Usingdigunakan pada waktu kompilasi hanya untuk keperluan penyelesaian nama tipe pendek menjadi nama tipe yang memenuhi syarat. Jadi, satu-satunya efek negatif yang tidak perlu usingdapat memperlambat waktu kompilasi sedikit dan mengambil sedikit lebih banyak memori selama kompilasi. Saya tidak akan khawatir tentang itu.

Dengan demikian, satu-satunya efek negatif nyata dari memiliki usingpernyataan yang tidak Anda butuhkan adalah pada intellisense, karena daftar kecocokan potensial untuk penyelesaian saat Anda mengetik meningkat.

Franci Penov
sumber
4

Anda mungkin memiliki bentrokan nama jika Anda memanggil kelas Anda seperti kelas (yang tidak digunakan) di namespace. Dalam kasus System.Text, Anda akan memiliki masalah jika Anda mendefinisikan kelas bernama "Encoder".

Bagaimanapun ini biasanya masalah kecil, dan terdeteksi oleh kompiler.

Pablo Fernandez
sumber
2

Aplikasi Anda tidak akan menggunakan lebih banyak memori. Untuk kompiler untuk menemukan kelas yang Anda gunakan dalam file kode. Itu benar-benar tidak ada salahnya tidak bersih.

mattlant
sumber
2

Ini preferensi pribadi terutama. Saya membersihkannya sendiri (Resharper melakukan pekerjaan yang baik untuk memberi tahu saya ketika ada pernyataan yang tidak dibutuhkan)

Orang bisa mengatakan bahwa itu mungkin mengurangi waktu untuk mengkompilasi, tetapi dengan kecepatan komputer dan kompiler hari ini tidak akan membuat dampak yang jelas.

Josh Sklare
sumber
2

Meninggalkan usingarahan ekstra tidak masalah. Ada sedikit nilai dalam menghapusnya, tetapi tidak banyak. Misalnya, itu membuat daftar penyelesaian IntelliSense saya lebih pendek, dan karenanya lebih mudah dinavigasi.

Majelis yang dikompilasi tidak terpengaruh oleh usingarahan asing .

Kadang-kadang saya menempatkan mereka di dalam #region, dan membiarkannya runtuh; ini membuat melihat file sedikit lebih bersih. IMO, ini adalah salah satu dari sedikit kegunaan baik #region.

Jay Bazuzi
sumber
1
Mereka dapat runtuh tanpa wilayah
abatishchev
1
@abatishchev: Ya, itu benar di VS2010.
Jay Bazuzi
"Salah satu dari sedikit kegunaan yang baik #region", jadi maksud Anda menggunakan #regionitu buruk dalam banyak hal?
Steven
Ya, #regionadalah bau kode. Dikatakan terlalu banyak hal yang terjadi di kelas Anda.
Jay Bazuzi
2

jika Anda ingin menjaga kode Anda tetap bersih, usingpernyataan yang tidak digunakan harus dihapus dari file. manfaatnya tampak sangat jelas ketika Anda bekerja di tim kolaboratif yang perlu memahami kode Anda, berpikir semua kode Anda harus dipertahankan, lebih sedikit kode = lebih sedikit kerja, manfaatnya jangka panjang.

Masd
sumber
1

Mereka hanya digunakan sebagai jalan pintas. Misalnya, Anda harus menulis: System.Int32 setiap kali jika Anda tidak memiliki Sistem yang menggunakan; di atas.

Menghapus yang tidak digunakan hanya membuat kode Anda terlihat lebih bersih.

Carra
sumber
1

Pernyataan menggunakan hanya membuat Anda dari kualifikasi jenis yang Anda gunakan. Saya pribadi suka membersihkannya. Sungguh itu tergantung pada bagaimana metrik loc digunakan

CheeZe5
sumber
1

Hanya memiliki ruang nama yang benar-benar Anda gunakan memungkinkan Anda untuk menjaga kode Anda didokumentasikan.

Anda dapat dengan mudah menemukan bagian kode mana yang saling memanggil dengan alat pencarian apa pun.

Jika Anda memiliki ruang nama yang tidak digunakan ini berarti apa-apa, saat menjalankan pencarian.

Saya sedang mengerjakan pembersihan ruang nama sekarang, karena saya terus-menerus ditanya bagian aplikasi apa yang mengakses data yang sama dengan satu atau lain cara.

Saya tahu bagian mana yang mengakses data setiap jalan karena akses data dipisahkan oleh ruang nama misalnya langsung melalui database dan secara langsung melalui layanan web.

Saya tidak bisa memikirkan cara yang lebih sederhana untuk melakukan ini sekaligus.

Jika Anda hanya ingin kode Anda menjadi kotak hitam (untuk pengembang), maka ya itu tidak masalah. Tetapi jika Anda perlu mempertahankannya dari waktu ke waktu, ini adalah dokumentasi yang berharga seperti semua kode lainnya.

Timothy Gonzalez
sumber
0

Pernyataan 'menggunakan' tidak memengaruhi kinerja karena hanya membantu dalam kualifikasi nama pengidentifikasi Anda. Jadi daripada harus mengetik, System.IO.Path.Combine (...) , Anda cukup mengetik, Path.Combine (...) jika Anda telah menggunakan System.IO .

Jordan Parmer
sumber
0

Jangan lupa bahwa kompiler melakukan banyak pekerjaan untuk mengoptimalkan semuanya ketika membangun proyek Anda. Menggunakan yang digunakan di banyak tempat atau 1 tidak boleh melakukan yang berbeda setelah dikompilasi.

Patrick Desjardins
sumber