2012-04-17 7 views
34

मेरे पास कक्षा पुस्तकालय है और मैं इसका केवल एक हिस्सा उपयोग कर रहा हूं। क्या बनाए गए कोड के आकार को कम करने के लिए उपयोग नहीं किया जा रहा है (रिलीज कॉन्फ़िगरेशन में) को हटाने की आवश्यकता है?क्या संकलक केवल संकलित कोड होगा जिसे निष्पादित किया जा सकता है?

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

अधिक जानकारी: क्लास लाइब्रेरी में विधियों और कक्षाएं हैं जिन्हें निष्पादन कोड से नहीं कहा जाता है, लेकिन कक्षा पुस्तकालय में कोड के अन्य हिस्सों द्वारा संदर्भित किया जाता है (जिसे स्वयं कभी नहीं कहा जाता है)।

+3

आप हमेशा .NET परावर्तक को पकड़ सकते हैं और "रिलीज़" डीएलएल में जो भी शामिल है उसे देख सकते हैं। सीखने का सबसे अच्छा तरीका प्रयोग करना है (या तो मेरा अनुभव रहा है) –

+3

क्या संकलक यह बताने में सक्षम होगा कि आप कभी भी उस डीएलएल को किसी ऐसे व्यक्ति को वितरित नहीं करेंगे जो उस कोड का उपयोग करने का प्रयास कर सकता है? –

+1

@ एंथनीपेग्राम लाइब्रेरी को अलग से संकलित नहीं किया गया है। मेरे पास मेरे प्रोजेक्ट में सोर्स कोड है। – ispiro

उत्तर

34

नहीं, संकलक में "मृत" कोड भी शामिल है। इसके लिए एक आसान कारण यह है कि यह जानना हमेशा संभव नहीं है कि वास्तव में कौन सा कोड होगा और निष्पादित नहीं किया जाएगा। उदाहरण के लिए, यहां तक ​​कि एक निजी विधि जिसे कभी संदर्भित नहीं किया जा सकता है उसे प्रतिबिंब के माध्यम से बुलाया जा सकता है, और बाहरी विधियों द्वारा सार्वजनिक विधियों का संदर्भ दिया जा सकता है।

आप अप्रयुक्त विधियों को ढूंढने और निकालने में मदद के लिए एक टूल का उपयोग कर सकते हैं (जिनमें केवल अन्य अप्रयुक्त विधियों द्वारा बुलाया जाता है)। शुरू करने के लिए What tools and techniques do you use to find dead code? और Find unused code आज़माएं।

0

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

6

यह सब संकलित हो जाता है। भले ही इसे कहा जाता है या नहीं। कोड को बाहरी पुस्तकालय द्वारा बुलाया जा सकता है।

संकलक अनदेखा कोड बनाने का एकमात्र तरीका कंपाइलर प्रीप्रोसेसर निर्देशों का उपयोग करके है। उन here के बारे में अधिक जानकारी।

+0

यह केवल बाहरी पुस्तकालय द्वारा बुलाया जा सकता है यदि यह सार्वजनिक है या सार्वजनिक वर्ग का संरक्षित सदस्य है। –

0

मान लीजिए कि Utility नामक एक क्लास लाइब्रेरी है। आपने एक नई परियोजना बनाई और इस प्रोजेक्ट में इस क्लास लाइब्रेरी को जोड़ा। भले ही आपका EXE कक्षा पुस्तकालय से केवल 1-2 विधियों को कॉल करता है, फिर भी संदर्भित कोड को हटाने का कोई अच्छा विचार नहीं है।

यह पुन: उपयोग के सिद्धांत के खिलाफ जाएगा। इस तथ्य के बावजूद कि EXE से संदर्भित पुस्तकालय में कुछ कक्षाएं मौजूद होंगी, इसका कार्यक्रम के प्रदर्शन या आकार पर कोई बुरा प्रभाव नहीं पड़ेगा।

0

सभी और केवल मृत कोड निर्धारित करना (यदि कोई आदर्शीकरण करता है कि किसी के पास भाषा की तरह "गणित की दुनिया" है) तो अधिकांश भाषाओं में रिकर्सिव रूप से अपरिहार्य है। (ब्लेज़ भाषा जैसे कुछ दुर्लभ लोग निर्णायक हैं।)

संबंधित मुद्दे

 संबंधित मुद्दे