2010-05-21 34 views
18

वर्षों से मेरा आवेदन 1 एमबी से 25 एमबी तक बढ़ गया है और मुझे उम्मीद है कि यह 40, 50 एमबी तक बढ़ेगा। मैं डीएलएल का उपयोग नहीं करता, लेकिन इस सब को एक बड़े निष्पादन योग्य में डाल देता हूं।एक बड़ा निष्पादन योग्य या कई छोटे डीएलएल?

  • ग्राहक पर मेरे अनुप्रयोग स्थापित करना वास्तव में है::

    एक बड़ा निष्पादन योग्य होने के लिए कुछ फायदे हैं कॉपी और रन।

  • उन्नयन आसानी से ज़िपित और ग्राहक
  • के लिए भेजा DLL के परस्पर विरोधी होने का कोई खतरा नहीं है हो सकता है (जहां ग्राहक EXE के संस्करण एक्स है, लेकिन DLL के संस्करण वाई)

बड़ा बड़े EXE का नुकसान यह है कि लिंकिंग समय तेजी से बढ़ने लगते हैं।

अतिरिक्त समस्या यह है कि कोड का एक हिस्सा (चलिए 40% के बारे में कहते हैं) को किसी अन्य एप्लिकेशन के साथ साझा किया जाता है। फिर, लाभ हैं कि:

  • गलत DLL संस्करणों
  • हर डेवलपर आम कोड जो घटनाओं को गति पर परिवर्तन कर सकते हैं का मिश्रण होने पर कोई खतरा नहीं है।

लेकिन फिर से, इसका संकलन समय पर गंभीर प्रभाव पड़ता है (हर कोई अपने पीसी पर फिर से सामान्य कोड संकलित करता है) और लिंकिंग समय पर।

सवाल Grouping DLL's for use in Executable DLL का मिश्रण एक निष्पादन में की संभावना का उल्लेख है, लेकिन ऐसा लगता है कि यह अभी भी मैन्युअल रूप से अपने आवेदन (LoadLibrary, GetProcAddress, ... का प्रयोग करके) में सभी कार्यों से जोड़ने के लिए की आवश्यकता है।

निष्पादन योग्य आकार, डीएलएल के उपयोग और आसान तैनाती और आसान/तेज़ विकास के बीच सर्वोत्तम 'संतुलन' पर आपकी राय क्या है?

उत्तर

13

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

आपकी समस्या का सबसे सरल समाधान दो संकलन मोड होना है, जो उत्पादन के लिए एक एक्सई बनाता है और जो विकास के लिए बहुत कम डीएलएल बनाता है।

+4

यह देखते हुए कि "एक बड़ा EXE" मॉडल सूचीबद्ध सूचीबद्ध नुकसान डेवलपर के लिए हैं, उपयोगकर्ता नहीं, यह विचार बहुत समझ में आता है। –

+0

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

2

एक बड़ा निष्पादन योग्य निश्चित रूप से फायदेमंद है - आपके पास संपूर्ण प्रोग्राम अनुकूलन और कम ओवरहेड और रखरखाव बहुत आसान हो सकता है।

लिंक समय के लिए - आप एक ही समय में "कई डीएलएल" और "एक बड़ा निष्पादन योग्य" दोनों हो सकते हैं। प्रत्येक डीएलएल के लिए एक प्रोजेक्ट कॉन्फ़िगरेशन होता है जो एक स्थिर लाइब्रेरी बनाता है। तो जब आप चीजों को डीबग करते हैं तो आप प्रोजेक्ट की "डीएलएल" कॉन्फ़िगरेशन संकलित करते हैं और जब आपको जहाज की आवश्यकता होती है तो आप अपनी परियोजनाओं की "स्थिर लाइब्रेरी" कॉन्फ़िगरेशन संकलित करते हैं। कभी-कभी आपके पास अलग-अलग कॉन्फ़िगरेशन में अलग-अलग व्यवहार होंगे, लेकिन इसे प्रति घटना को संबोधित करना होगा।

2

बड़े कार्यक्रमों को बनाए रखने का एक आसान तरीका उन्हें छोटे प्रबंधनीय भागों में लिखना है। एक कार्यक्रम को एक खोल और मॉड्यूल में बनाया जा सकता है जो खोल में सुविधा जोड़ता है। विजुअल स्टूडियो जैसे बड़े कार्यक्रम, दृष्टिकोण सभी एक ही अवधारणाओं का उपयोग करते हैं। अधिक रखरखाव और मजबूत कार्यक्रम बनाने के लिए इस दृष्टिकोण को आजमाएं।

4

सिद्धांत है: आपकी संख्या को कम करें।एनईटी असेंबली सख्त न्यूनतम पर। एक असेंबली होने का आदर्श नंबर है। यह उदाहरण के लिए परावर्तक या एनएचबीर्नेट के मामले में है जो दोनों बहुत कम असेंबली के रूप में आते हैं।

तर्क इन सफेद पुस्तकों में विकसित कर रहे हैं: मेरी कंपनी विषय एक बड़ा निष्पादन या कई छोटे DLL के पर free two white books प्रकाशित NDepend टूल के कोड बेस पर एक असेंबली और केस स्टडी बनाने के लिए अमान्य/वैध कारणों के साथ आते हैं।

समस्या यह है कि एमएस fosters (और अभी भी fostering) विचार है कि असेंबली घटक हैं जबकि विधानसभा कोड भौतिक आर्टिफैक्ट कोड पैक करने के लिए हैं। घटक की धारणा तार्किक आर्टिफैक्ट है और आम तौर पर एक असेंबली में कई घटक होना चाहिए। नामस्थानों की धारणा के साथ घटक को विभाजित करना एक अच्छा विचार है, हालांकि यह हमेशा व्यावहारिक नहीं होता है (विशेष रूप से एक सार्वजनिक एपीआई के साथ ढांचे के मामले में जहां नामस्थान का उपयोग एपीआई को विभाजित करने के लिए किया जाता है और आवश्यक रूप से घटक नहीं)

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