2009-06-30 30 views
13

मैं अक्सर लोगों को सी # की संकलन गति की प्रशंसा करता हूं। अब तक मैंने केवल कुछ छोटे अनुप्रयोग बनाए हैं, और वास्तव में मैंने देखा है कि संकलन बहुत तेज़ था। हालांकि, मैं सोच रहा था कि यह अभी भी बड़े अनुप्रयोग के लिए है। बड़ी सी # परियोजनाएं समान आकार की सी ++ परियोजनाओं की तुलना में तेज़ी से संकलित करती हैं?सी # संकलन समय बड़ी परियोजनाओं (सी ++ की तुलना में)

+2

मैं भी यही सोच रहा था। मैंने सी # में एक छोटा सा एप्लीकेशन संकलित किया और संकलन सी ++ की तुलना में आश्चर्यजनक रूप से तेज था। – Naveen

+0

मैंने ऐसे समाधान पर काम किया है जिसमें 40 से अधिक परियोजनाएं थीं (मैंने इसे नहीं बनाया) जिसने पीआईवी पर संकलन करने में काफी समय लगाया (लगभग 1 मिनट)। कोर 2 पर अपने पीसी को अपग्रेड करना इसे कम परियोजनाओं में कोड को दोबारा करने के रूप में एक और अधिक स्वीकार्य समय तक काट दिया। कई परियोजनाएं होने से सी # परियोजनाओं के संकलन समय प्रभावित होंगे। खराब शीर्षलेख फ़ाइल हैंडलिंग पर टिप्पणी के लिए – RichardOD

उत्तर

5

जहां तक ​​मैं अपने अनुभव से बता सकता हूं, हाँ, सी # सी ++ परियोजनाओं की तुलना में बहुत तेज है। यहां तक ​​कि बड़े अनुप्रयोगों के लिए भी।

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

10

हां, सी # सामान्य रूप से बहुत तेज़ी से संकलित करता है। हालांकि हमेशा पर्याप्त तेज़ नहीं है। कई सबसे बड़ी परियोजनाओं के साथ कोड की दस लाख लाइनों के साथ मेरा सबसे बड़ा सी # कोडबेस संकलित करने में लगभग एक घंटा लगा। लेकिन मुझे संदेह है कि इस समय के अधिकांश दृश्य स्टूडियो खराब निर्माण प्रणाली के कारण हैं। दूसरी ओर सी ++ के लिए संकलन समय आमतौर पर अधिक लंबा होता है, लेकिन यह भी आपके कोड को व्यवस्थित करने के तरीके पर निर्भर करता है। हेडर फ़ाइल निर्भरताओं के खराब हैंडलिंग परिमाण के कई आदेशों के साथ आसानी से संकलन समय बढ़ा सकते हैं।

+4

+1 - हेडर फ़ाइलों को सॉर्ट करके हम अपने बड़े सी ++ प्रोजेक्ट पर 1 घंटे से 8 मिनट तक गिर गए! जब आप केवल लाइब्रेरी के कार्यान्वयन को बदलते हैं तो पुनर्निर्माण की आवश्यकता वाले निर्भर परियोजनाओं के साथ सी # समस्या को इंगित करने के लिए –

6

सी ++ संकलन करने में इतनी धीमी है क्योंकि हेडर फ़ाइलों को फिर से पढ़ना होगा और जब भी वे शामिल होते हैं तो उन्हें दोबारा पोस्ट करना होगा। "#defines" काम के तरीके के कारण, एक कंपाइलर के लिए सभी हेडर फ़ाइलों को स्वचालित रूप से संकलित करने के लिए बहुत मुश्किल है। (मॉडुला -2 ने इसका एक बेहतर काम किया) संकलित की गई प्रत्येक सी ++ फ़ाइल के लिए 100 से अधिक शीर्षलेख पढ़े जाने के बाद सी ++ परियोजनाओं पर सामान्य है।

कभी-कभी वृद्धिशील सी ++ संकलन सी # से बहुत तेज हो सकता है। यदि आपके पास अपनी सभी सी ++ हेडर फाइलें (और डिज़ाइन) बहुत अच्छी स्थिति में हैं (Large-Scale C++ Software Design, Effective C++ जैसी पुस्तकें देखें) आप अधिकांश कक्षा द्वारा उपयोग की जाने वाली कक्षा के कार्यान्वयन में बदलाव कर सकते हैं और केवल एक डीएल पुनः संकलन कर सकते हैं ।

जब भी आप कक्षा के प्रत्यारोपण को बदलते हैं तो सी # में अलग-अलग शीर्षलेख फ़ाइलें नहीं होती हैं, इसलिए कक्षा के सभी प्रकार के बदलावों को बदलने के बावजूद कक्षा के सभी उपयोगों को फिर से संकलित किया जाता है। इसे "इंटरफ़ेस आधारित प्रोग्रामिंग" और "निर्भरता इंजेक्शन" आदि का उपयोग कर सी # में कम किया जा सकता है लेकिन यह अभी भी एक दर्द है।

हालांकि पूरी तरह से मुझे लगता है कि सी # पर्याप्त तेज़ी से संकलित है, लेकिन बड़ी सी ++ परियोजनाएं संकलित करने में इतनी धीमी हैं कि मैं खुद को पुनर्निर्माण के समय के कारण "बेस क्लास" में कोई तरीका नहीं जोड़ना चाहता हूं।

प्रत्येक में कुछ हद तक कक्षाओं के साथ विजुअल स्टूडियो परियोजनाएं होने से सी # धीमा हो सकता है। संबंधित परियोजनाओं को एक साथ जोड़कर और फिर डेवलपर्स को "भरोसा" करने वाले वर्ग का उपयोग न करने के लिए जो नामस्थान के लिए निजी हैं, कभी-कभी एक बड़ा लाभ हो सकता है। (जब C++ तेजी लाने के लिए संकलित की कोशिश कर रहा बहुत उपयोगी FileMon मिल गया है। एक परियोजना मैं पर काम किया, एसटीएल एक हेडर फाइल को जोड़ा गया है और निर्माण मिला

(nDepends नियम तोड़ने लोगों के लिए जाँच करने के लिए इस्तेमाल किया जा सकता) बहुत धीमी गति से। प्रीकंपील्ड हेडर फ़ाइल में बस एसटीएल जोड़ना एक बड़ा अंतर बना देता है! इसलिए अपने निर्माण समय को ट्रैक करें और धीमे होने पर जांच करें)

+0

+1। इंटरफ़ेस को कार्यान्वयन से स्पष्ट रूप से अलग करने पर सी ++ बेहतर काम करता है, जो वास्तव में इसे बड़ी परियोजनाओं में अधिक उपयुक्त बनाता है। निर्भरता इंजेक्शन केवल एक कामकाज है क्योंकि यह पूरे कोडबेस को एक अनुपालन तरीके से फिर से लिखने के लिए मजबूर करता है, यानी यह आक्रामक है। –

3

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

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