2011-03-02 10 views
8

मैं एक सी ++ आवेदन मूल रूप से दृश्य स्टूडियो के साथ लिखा 6.0विजुअल स्टूडियो 2010 निष्पादन योग्य आकार उत्पन्न बड़ा

आवेदन मानक और कच्चे Win32 एपीआई है, कोई MFC (* संपादित करें 2), कोई नेट, स्थिर जुड़ा हुआ मिल गया है , बहु थ्रेडेड निष्पादन योग्य।

मैं 2010 (आज) तक दृश्य स्टूडियो के सभी संस्करणों के माध्यम से चले गए और अब तक किसी भी समस्याओं नहीं था:

यह कम्पाइल और VS2010 लेकिन उत्पन्न निष्पादन योग्य आकार के साथ पूरी तरह से चलाता है चार (4) बार बड़ा!

मैंने सभी विकल्पों को आजमाया है (ऑप्टिमाइज़ेशन, डीबग जानकारी, आदि ..) को बिना किसी परिणाम के हटा दें। अनुमोदित, मैं वीएस -2010 के लिए नया हूं, लेकिन विजुअल स्टूडियो के लिए नहीं।

क्या किसी को भी इस समस्या का सामना करना पड़ा है? दोबारा: मैं किसी भी ढांचे का उपयोग नहीं कर रहा हूं, यह एक कच्चा, स्थैतिक रूप से जुड़ा हुआ है, Win32 अनुप्रयोग, कोई डीएलएल, कोई ओडीबीसी, कोई नेटवर्क नहीं, कोई .NET

मेरे निष्पादन योग्य को एक बार फिर से देखने की उम्मीद है, मैं किसी के लिए धन्यवाद इनपुट।

  • संपादित करें 1: मूल आकार = 626KB (VS6.0, VS2008) फूला हुआ आकार = 2.013KB (VS2010)

  • संपादित करें 2: कुछ शोध के बाद और उदासीनता, मैं एक छिपा की खोज की एमएफसी के संदर्भ में। मूल रूप से मैंने कहा कि यह एमएफसी का उपयोग नहीं करता है, लेकिन यह करता है।

+1

यह शायद या तो स्थिर रूप से जुड़ा हुआ हो सकता है या संभवतया एक लिंकर सेटिंग VS2010 में बदली गई ताकि बेहतर कैशिंग या कुछ के लिए डिफ़ॉल्ट रूप से बड़े सेक्शन उत्पन्न हो सकें। हम किस परिमाण के बारे में बात कर रहे हैं - 4 के से 16 के लिए? 64 के से 256 के लिए? 1 एमबी से 4 एमबी? – Rup

+0

4-बार बड़ा मतलब क्या है? मेगाबाइट? पांच मेगाबाइट्स? –

+0

मैंने नमूना आकार शामिल करने के लिए प्रश्न संपादित किया है, यह मेरे सभी अनुप्रयोगों के साथ होता है। – Migs

उत्तर

2

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

अद्यतन:

यह ओपी MFC का उपयोग नहीं करता की तरह लग रहा है, तो इन दो अलग अलग मुद्दों हो सकता है।मैंने आकार में वृद्धि का अनुभव किया है लेकिन दुर्भाग्यवश यह नहीं कह सकता कि एमएफसी के कारण या नहीं, क्योंकि मेरी परियोजना स्थिर रूप से एमएफसी से जुड़ी है।

+0

यह बहुत साफ है, हालांकि मैं नहीं देख सकता कि आप गतिशील रूप से लिंक करने के बजाय स्थिर रूप से लिंक क्यों करना चाहते हैं, हालांकि अब एमएफसी WinSxS में रहता है। ओपी का कहना है कि वह एमएफसी का उपयोग नहीं कर रहा है, हालांकि। – Rup

+0

जब आप कमांड लाइन उपकरण लिखते हैं तो आप स्थिर रूप से लिंक करना चाहते हैं जिसे आप इंस्टॉलर और एमएफसी रनटाइम के बिना EXE के रूप में वितरित करना चाहते हैं। –

1

कोई भी मौका आपने "किसी भी CPU" पर डिफ़ॉल्ट प्लेटफ़ॉर्म लक्ष्य छोड़ा है? यदि ऐसा है, तो 32-बिट केवल कोड के लिए इसे x86 में बदलें। मुझे लगता है कि इससे अधिकतर अंतर आएंगे। शेष संकलक अनुकूलन में परिवर्तन की संभावना है (अधिक आक्रामक लूप अनोलिंग और क्या नहीं है जहां रैम सस्ता है क्योंकि गति के लिए आकार का कारोबार किया गया है)। मेरा मानना ​​है कि सभी दानेदार अनुकूलन अभी भी कमांड लाइन से उपलब्ध हैं, लेकिन कई यूआई विकल्प पैनलों में अस्पष्ट हैं।

+2

यह सेटिंग लागू होती है।नेट परियोजनाएं, प्रश्नपत्र की समस्या (देशी संकलन) – CharlesB

+0

नहीं, मैंने कोशिश की है। समस्या 9 0% निश्चित रूप से मैंने ऊपर टिप्पणी की है: प्रोजेक्ट माइग्रेट करते समय, एमएफसी ने अपना रास्ता वापस ले लिया, लेकिन अभी मेरे पास यह जांचने का समय नहीं है कि यह कहां है। जैसे ही मुझे कुछ खाली समय मिलता है, मैं अंतिम निष्कर्ष की जांच और पोस्ट करूंगा। – Migs

1

Are there any tools for tracking down bloat in C++? देखें - कुछ तकनीकों का विश्लेषण कैसे किया जा सकता है कि निष्पादन योग्य आकार में क्या योगदान होता है। एक बार जब आप वीसी 6 और वीएस 2010 आउटपुट दोनों पर विश्लेषण करते हैं, तो उम्मीद है कि आपको कुछ उपयोगी लगेगा।

वीसी 6 से कुछ विजुअल स्टूडियो संस्करण में पोर्टिंग करते समय मुझे एक विशेष गोचा गया है: कुछ अनुकूलन विकल्पों का अर्थ बदल गया है और वीसी 6 प्रोजेक्ट में जो मूल्य मैं उपयोग कर रहा था, अब समर्थित नहीं था, और एक के रूप में नतीजतन वीएस द्वारा उत्पादित एक्सई को बिल्कुल अनुकूलित नहीं किया गया था, जिससे दोनों निष्पादन योग्य ब्लोट और धीमी प्रदर्शन हुई। गुण/सी/सी ++/अनुकूलन में अपनी अनुकूलन सेटिंग्स की जांच करें और सुनिश्चित करें कि अनुकूलन/ऑक्स,/ओ 2 या/ओ 1 पर है।

1

ऐसा इसलिए है क्योंकि वीएस -2010 में माइक्रोसॉफ्ट ने एक संवाद विंडो में एचटीएमएल घटकों को अनुमति देने की कार्यक्षमता को जोड़ा है, इसलिए यदि आप इसका उपयोग नहीं कर रहे हैं और ऑप्टिमाइज़ेशन और विकल्प और असुरक्षित कोड को हटाने में मदद नहीं करते हैं तो सामानों का एक गुच्छा खींच लिया जाता है और लिंक किया जाता है । कोड को हटाने का "अच्छा" तरीका नहीं है, लेकिन कुछ हैक अप तरीके हैं। हम इसके कारण अभी भी वीएस 2008 पर हमारी आकार-महत्वपूर्ण सामग्री संकलित करते हैं। साइड नोट, हमारे गैर-जीयूआई कोड वास्तव में इसके लायक होने के लिए छोटे संकलित करते हैं। उम्मीद है कि एमएस एक फिक्स/पैच में इसके लिए एक विकल्प के साथ आता है, इसलिए मैं वीएस -2010 पर सब कुछ कर सकता हूं लेकिन मैं अपनी सांस नहीं पकड़ रहा हूं ...

2

यदि आप स्थिर लिंकिंग का उपयोग कर रहे हैं, तो मैं लिंकर स्विच का उपयोग करने का सुझाव देता हूं आप सिंटैक्स का उपयोग कर कमांड लाइन पर संकलित कर रहे हैं:

सीएल/ऑक्स [आपकी सी ++ स्रोत फ़ाइल] [पुस्तकालयों को यदि आवश्यक हो] [संसाधन फ़ाइलों की आवश्यकता है तो कोई भी]/लिंक/फ़ाइल: 512/ओपीटी: आरईएफ/ओपीटी: आईसीएफ/संवर्द्धन: नहीं

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

लिंकर के नीचे कमांड लाइन में, अतिरिक्त विकल्प प्रविष्टि में विकल्प/फ़ाइल: 512 निर्दिष्ट करें और लागू करें बटन पर क्लिक करें। लिंकर के तहत सामान्य विकल्प में, संख्या (/ INCREMENTAL: NO) चुनकर वृद्धिशील लिंकिंग अक्षम करें। लिंकर के डिबगिंग विकल्प में, डीबग जानकारी जेनरेट करने के लिए नो का चयन करें। लिंकर ऑप्टिमाइज़ेशन के लिए, आप संदर्भों में अनधिकृत डेटा (/ ओपीटी: आरईएफ) को हटाएं और कॉमडैट फोल्डिंग सक्षम करने में रिडंडंट COMDATs (/ OPT: ICF) को हटाएं।

कंपाइलर अनुकूलन के लिए, सुनिश्चित करें कि रिलीज कॉन्फ़िगरेशन चुना गया है, बाएं फलक पर सी/सी ++ पेड़ दृश्य पर क्लिक करें और उसके तहत, अनुकूलन पर क्लिक करें, पूर्ण अनुकूलन (/ ऑक्स) चुनें। सी/सी ++ के तहत सामान्य सेटिंग में, डीबग सूचना प्रारूप के लिए अक्षम का चयन करें।

आपके द्वारा किए गए हर परिवर्तन के लिए लागू करें बटन पर क्लिक करना न भूलें।

मुझे उम्मीद है कि मैंने जो कुछ भी बताया है, वह आपके लिए उपयोगी होगा और ये सभी दृश्य सी ++ 2005 और 2008 पर लागू होंगे, लेकिन उम्मीद है कि यह विज़ुअल सी ++ 2010 पर भी लागू होगा, अगर नहीं, तो कृपया अपने साथ शामिल दस्तावेज की जांच करें दृश्य सी ++ 2010 स्थापना।

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