आपको निर्देशों का उपयोग करके अनावश्यक C # क्यों निकालना चाहिए?


216

उदाहरण के लिए, मुझे शायद ही कभी चाहिए:

using System.Text;

लेकिन यह हमेशा डिफ़ॉल्ट रूप से होता है। मुझे लगता है कि यदि आपके कोड में निर्देशों का उपयोग अनावश्यक है तो एप्लिकेशन अधिक मेमोरी का उपयोग करेगा । लेकिन क्या कुछ और है जिसकी मुझे जानकारी होनी चाहिए?

इसके अलावा, क्या इससे कोई फर्क पड़ता है कि अगर निर्देशन का उपयोग करने वाला केवल एक फ़ाइल बनाम अधिकांश / सभी फ़ाइलों में उपयोग किया जाता है?


संपादित करें: ध्यान दें कि यह प्रश्न असंबंधित अवधारणा के बारे में नहीं है जिसे एक उपयोग कथन कहा जाता है , जिसे यह सुनिश्चित करने के लिए संसाधनों का प्रबंधन करने में मदद करने के लिए डिज़ाइन किया गया है कि जब कोई वस्तु दायरे से बाहर हो जाती है, तो उसका आईडीआईएसओड्रोस्पैक्टिव तरीका कहा जाता है। सी # में "उपयोग" के उपयोग देखें ।

जवाबों:


181

जब आपका प्रोग्राम चलता है तो यह कुछ भी नहीं बदलेगा। जरूरत की हर चीज मांग पर भरी हुई है। इसलिए, भले ही आपके पास उस कथन का उपयोग करना हो, जब तक कि आप वास्तव में उस नाम स्थान / विधानसभा में एक प्रकार का उपयोग नहीं करते हैं, तब तक कथन का उपयोग करने वाले असेंबली को लोड नहीं किया जाएगा।

मुख्य रूप से, यह केवल व्यक्तिगत वरीयता के लिए सफाई करना है।


@francip - यही तो मैं कह रहा हूँ। असेंबली लोडिंग को प्रभावित नहीं करता है, एक असेंबली को तब तक लोड नहीं किया जाता है जब तक कि असेंबली में निहित एक प्रकार को संदर्भित नहीं किया जाता है।
डेरेन कोप्प

69
लेकिन यह संकलन समय और Intellisense / IDE जवाबदेही को प्रभावित कर सकता है।
Marchy

Franci / FlySwat
JohnB

475

वहाँ रहे हैं अप्रयुक्त को दूर करने का उपयोग कर (रों) / नामस्थान, वरीयता कोडिंग के अलावा के लिए कुछ कारण हैं:

  • किसी प्रोजेक्ट में क्लॉज़ का उपयोग करने वाले अप्रयुक्त को हटाकर, संकलन को तेज़ बना सकता है क्योंकि कंपाइलर के पास हल करने के लिए लुक-अप प्रकारों के लिए कम नेमस्पेस हैं। (यह विस्तार विधियों के कारण C # 3.0 के लिए विशेष रूप से सच है, जहां संकलक को संभावित बेहतर मैचों के लिए विस्तार विधियों के लिए सभी नामस्थानों की खोज करनी चाहिए, जेनेरिक प्रकारों में सामान्य प्रकार के इंजेक्शन और लैम्ब्डा के भाव शामिल हैं)
  • संभावित रूप से उपयोग किए गए नामस्थानों में नए प्रकार जोड़े जाने पर उपयोग किए गए नामस्थानों में कुछ प्रकार के समान नाम जोड़ने पर भविष्य के बिल्ड में नाम टकराने से बचने के लिए संभावित रूप से मदद कर सकता है।
  • संपादक ऑटो समापन सूची में आइटमों की संख्या को कम कर देगा, जब कोडिंग, संभवतः तेज टाइपिंग के लिए अग्रणी (सी # 3.0 में यह दिखाए गए विस्तार विधियों की सूची को भी कम कर सकता है)

अप्रयुक्त नामस्थानों को हटाने से क्या नहीं होगा :

  • किसी भी तरह से कंपाइलर के आउटपुट में बदलाव।
  • किसी भी तरह से संकलित कार्यक्रम का निष्पादन (तेजी से लोड हो रहा है, या बेहतर प्रदर्शन)।

निकाले गए असेंबली को बिना उपयोग किए (बिना) हटाए गए के साथ समान है।


3
और जैसे ही आप फ़ाइलों को संशोधित करते हैं, आप फ़ाइलों की शुरुआत में अधिक से अधिक नामस्थान जोड़ देंगे। इसलिए यदि आप अप्रयुक्त नामस्थानों को नहीं हटाते हैं, तो जब आप फ़ाइल खोलते हैं, तो आप सभी देखते हैं कि वास्तविक कार्यान्वयन के बजाय नामस्थानों की एक विशाल सूची है।
मर्ट अक्काया

5
तेजी से संकलन के बारे में: फाइलों usingमें अप्रयुक्त निर्देश .csआपको अपनी परियोजना से कुछ (अन्यथा अप्रयुक्त) विधानसभा संदर्भों को हटाने से रोक सकते हैं .csproj। यदि आपके पास कई परियोजनाओं का "समाधान" है, तो परियोजनाओं के बीच अनावश्यक संदर्भ परियोजनाओं को एक विशिष्ट क्रम में संकलित करने के लिए मजबूर करेंगे जब वास्तव में वे स्वतंत्र हैं और समानांतर में संकलित किए जा सकते हैं। usingएक से अधिक प्रोजेक्ट समाधान में अप्रयुक्त प्रोजेक्ट संदर्भ के लिए जाँच करने से पहले अप्रयुक्त निर्देशों को हटा दें ।
जेपी स्टिग नीलसन

1
यह एक महान स्पष्टीकरण है - अंत में इसका प्रदर्शन के साथ बहुत कुछ नहीं है, बल्कि सर्वोत्तम अभ्यास हैं। समझाने के लिए धन्यवाद!
GSaunders

39

कोड स्वच्छता है महत्वपूर्ण।

एक को यह अहसास होना शुरू हो जाता है कि कोड को अनमना किया जा सकता है और जब वह शानदार प्रदर्शन करता है, तो ब्राउफील्ड पथ पर। संक्षेप में, जब मैं कुछ अप्रयुक्त बयानों को देखता हूं, तो मेरे मस्तिष्क के पीछे थोड़ा पीला झंडा जाता है, जो मुझे "सावधानी के साथ" बताता है। और उत्पादन कोड को पढ़ने से आपको कभी भी ऐसा महसूस नहीं करना चाहिए।

इसलिए अपने प्रयोग को साफ करें। मैला मत बनो। आत्मविश्वास बढ़ाना। अपने कोड को सुंदर बनाएं। एक और देवता दें जो गर्म-अजीब महसूस कर रहा हो।


अब यह वही है जो मैं सुनना चाहता था :-) मैं Organize Usings -> Remove and Sortहर अब और फिर कर रहा हूँ । BTW, मेरे लिए ऊपरी दो विकल्प Organize Usingsअर्थहीन हैं। मैं VS2013 btw के बारे में बात कर रहा हूँ।
SAN16ошƒаӽ

30

कोई आईएल निर्माण नहीं है जो से मेल खाती है using। इस प्रकार, usingबयान आपकी एप्लिकेशन मेमोरी को नहीं बढ़ाते हैं, क्योंकि इसके लिए कोई कोड या डेटा उत्पन्न नहीं होता है।

Usingपूरी तरह से योग्य प्रकार के नामों के लिए लघु प्रकार के नामों को हल करने के प्रयोजनों के लिए केवल संकलन समय पर उपयोग किया जाता है। इस प्रकार, केवल नकारात्मक प्रभाव अनावश्यक हैusing हो सकता है संकलन समय को थोड़ा धीमा कर रहा है और संकलन के दौरान थोड़ी अधिक स्मृति ले रहा है। मैं उस के बारे में चिंतित नहीं होगा।

इस प्रकार, usingआपके कथन की आवश्यकता का एकमात्र वास्तविक नकारात्मक प्रभाव अंतर्मुखी पर नहीं है, क्योंकि जब आप टाइप करते हैं तो पूरा होने के लिए संभावित मैचों की सूची।


4

यदि आप अपनी कक्षाओं को नामांकित में (अप्रयुक्त) कक्षाओं की तरह बुलाते हैं, तो आपके नाम में गड़बड़ी हो सकती है। System.Text के मामले में, आपको एक समस्या होगी यदि आप "एनकोडर" नामक वर्ग को परिभाषित करते हैं।

वैसे भी यह आमतौर पर एक छोटी समस्या है, और संकलक द्वारा पता लगाया गया है।


2

आपका एप्लिकेशन अधिक मेमोरी का उपयोग नहीं करेगा। संकलक के लिए इसका उपयोग आप उन कोड फ़ाइलों को खोजने के लिए करते हैं। यह वास्तव में साफ नहीं होने से परे चोट नहीं है।


2

यह मुख्य रूप से व्यक्तिगत प्राथमिकता है। मैं उन्हें अपने आप को साफ करता हूं (जब स्टेटमेंट्स का उपयोग करने में अनावश्यकता हो तो मुझे बताने का अच्छा काम करता है)।

कोई कह सकता है कि यह संकलन करने के लिए समय कम कर सकता है, लेकिन इन दिनों कंप्यूटर और कंपाइलर की गति के साथ यह बस किसी भी तरह का प्रभाव नहीं डाल सकता है।


2

अतिरिक्त usingनिर्देश छोड़ना ठीक है। उन्हें हटाने में थोड़ा मूल्य है, लेकिन ज्यादा नहीं। उदाहरण के लिए, यह मेरी IntelliSense पूर्ण सूची को छोटा बनाता है, और इसलिए नेविगेट करना आसान है।

संकलित असेंबलियों को बाहरी usingनिर्देशों से प्रभावित नहीं किया जाता है ।

कभी-कभी मैं उन्हें एक के अंदर डाल देता हूं #region, और इसे ढह जाता है; यह फ़ाइल को थोड़ा साफ करने वाला बनाता है। IMO, यह कुछ अच्छे उपयोगों में से एक है #region


1
उन्हें एक क्षेत्र के बिना ध्वस्त किया जा सकता है
abatishchev

1
@abatishchev: हाँ, यह VS2010 में सच है।
Jay Bazuzi

"कुछ अच्छे उपयोगों में से एक #region", तो आप का उपयोग करने #regionका मतलब ज्यादातर तरीकों से खराब है?
स्टीवन

हाँ, #regionएक कोड गंध है। यह कहता है कि आपकी कक्षा में बहुत चल रहा है।
जे बाजुज़ी

2

यदि आप अपने कोड को साफ-सुथरा रखना चाहते हैं, तो उपयोग किए गए usingविवरणों को फ़ाइल से हटाया नहीं जाना चाहिए। जब आप एक सहयोगी टीम में काम करते हैं तो लाभ बहुत स्पष्ट दिखाई देता है, जिसे आपके कोड को समझने की आवश्यकता होती है, सोचते हैं कि आपके सभी कोड बनाए रखने होंगे, कम कोड = कम काम, लाभ दीर्घकालिक हैं।


1

उन्हें सिर्फ एक शॉर्टकट के रूप में उपयोग किया जाता है। उदाहरण के लिए, आपको लिखना होगा: System.Int32 हर बार अगर आपके पास सिस्टम का उपयोग नहीं होता है; शीर्ष पर।

अप्रयुक्त को हटाने से सिर्फ आपका कोड साफ दिखता है।


1

आपके द्वारा उपयोग किए जाने वाले प्रकारों को अर्हता प्राप्त करने से केवल कथन का उपयोग किया जाता है। मैं व्यक्तिगत रूप से उन्हें साफ करना पसंद करता हूं। वास्तव में यह इस बात पर निर्भर करता है कि कैसे एक स्थानीय मीट्रिक का उपयोग किया जाता है


1

केवल आपके द्वारा उपयोग किए जाने वाले नामस्थानों के होने से आप अपने कोड को प्रलेखित रख सकते हैं।

आप आसानी से पा सकते हैं कि आपके कोड के कौन से भाग किसी अन्य को किसी भी खोज टूल द्वारा बुला रहे हैं।

यदि आपके पास अप्रयुक्त नामस्थान हैं तो इसका मतलब कुछ नहीं है, जब कोई खोज चल रही हो।

मैं अब नामस्थानों की सफाई पर काम कर रहा हूं, क्योंकि मुझे लगातार पूछा जाता है कि एप्लिकेशन के कौन से हिस्से एक ही डेटा को एक या दूसरे तरीके से एक्सेस कर रहे हैं।

मुझे पता है कि डेटा एक्सेस के कारण प्रत्येक हिस्से को डेटा एक्सेस किस तरह से हो रहा है, जैसे कि नामस्थान द्वारा अलग किया जा रहा है जैसे कि एक डेटाबेस के माध्यम से और सीधे एक वेब सेवा के माध्यम से।

मैं एक बार में यह सब करने का एक सरल तरीका नहीं सोच सकता।

यदि आप चाहते हैं कि आपका कोड एक ब्लैक बॉक्स (डेवलपर्स के लिए) हो, तो हाँ यह कोई मायने नहीं रखता है। लेकिन अगर आपको इसे समय पर बनाए रखने की आवश्यकता है तो यह अन्य सभी कोड की तरह मूल्यवान दस्तावेज है।


0

'का उपयोग कर' बयान प्रदर्शन को प्रभावित नहीं करता है क्योंकि यह केवल आपके पहचानकर्ताओं के नामों को योग्य बनाने में सहायक है। इसलिए टाइप करने के बजाय, System.IO.Path.Combine (...) , यदि आप System.IO का उपयोग कर रहे हैं , तो आप बस Path.Combine (...) टाइप कर सकते हैं ।


0

यह मत भूलो कि कंपाइलर आपकी परियोजना का निर्माण करते समय सब कुछ अनुकूलित करने के लिए बहुत काम करते हैं। उस जगह का उपयोग करना बहुत अधिक जगह में उपयोग किया जाता है या 1 को एक बार संकलित एक अलग नहीं करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.