2010-10-27 13 views

उत्तर

6

पूर्व संकलन हेडर के अलावा, वहाँ अन्य चीजें हैं जो आप को धीमा किया जा सकता है की संख्या रहे हैं:

  • वायरस जाँच सॉफ्टवेयर - एक बुरा प्रभाव पर आधारित हो सकता है। यदि आपके पास वायरस चेकर चल रहा है तो इसे बंद करने का प्रयास करें और देखें कि आपको किस प्रकार का सुधार मिलता है।
  • कम रैम - पर्याप्त रैम नहीं होगा और अधिक डिस्क पढ़ने और आपको धीमा कर देगा। शेष भाग ->
  • धीरे HDD - आप भले ही डिस्क को लिखने के लिए है और एक धीमी गति से ड्राइव, कई लैपटॉप और कम क्षमता वाली प्रणालियों में मौजूद लोगों की तरह, मार डालेगा अपने बनाता है। आप एक तेज ड्राइव, एक RAID सरणी या एसएसडी
  • धीमा प्रोसेसर ... निश्चित रूप से प्राप्त कर सकते हैं।
  • असंभव है, लेकिन: जांचें और देखें कि आपकी परियोजनाएं नेटवर्क शेयरों का संदर्भ दे रही हैं या नहीं। प्रत्येक निर्माण के साथ नेटवर्क भर में फ़ाइलों को खींचने के लिए एक बड़ी मंदी होगी।

संपादित कुछ अधिक विचार:

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

यदि आप पूरी तरह से वायरस जांच बंद नहीं करना चाहते हैं, तो कई स्कैनर आपको अपवाद निर्दिष्ट करने की अनुमति देते हैं। अपवाद सूची में '* .c, * .cpp, * .h * .hpp, * .obj, * .lib, * .pch, * .ncb' जोड़ना आपको गति का 9 5% मिलता है, और फिर भी सभी आम पकड़ता है वायरस। – MSalters

+1

नेटवर्क शेयर एक बड़ी बाधा हैं। मेरा निर्माण समय ~ 1 मिनट (एक छोटे से 1 पृष्ठ-कोड-कोड डेमो प्रोजेक्ट के लिए) से ~ 1 सेकंड तक चला गया जब मैंने अपने नेटवर्क शेयर से अपने स्थानीय एसएसडी में स्विच किया। –

2

Precompiled हेडर उपयोगी यदि आप जटिल हेडर (एसटीएल, उदाहरण के लिए बूस्ट) फ़ाइलों का एक बहुत में सीधे शामिल हो सकता है।

यकीन है कि अपने निर्माण अनजाने, या जानबूझकर नेटवर्क तक पहुंच न हो।

4

आप फ़ाइलों जो सामान्य रूप से अभ्यस्त अक्सर बदलने वाली एक pre-compiled header बना सकते हैं। यह नाटकीय रूप से आपके संकलन समय को बढ़ा सकता है।

+0

मैं इस कभी नहीं देखा है जब मैं दृश्य स्टूडियो का उपयोग शुरू किया। मैंने कोड :: ब्लॉक से स्विच किया जो आपके लिए स्वचालित रूप से ऐसा लगता है। –

2

आप मल्टीकोर cpu है, तो /MP compiler option का उपयोग करें।

संपादित करें: What techniques can be used to speed up C++ compilation times?

+0

मैं जी ++ का उपयोग करता हूं इसलिए मुझे यकीन नहीं है लेकिन जहां तक ​​मुझे पता है कि बनाम2005 भी इस विकल्प का समर्थन करता है लेकिन यह अनियंत्रित है। – bmeric

+2

मेरा मानना ​​है कि वीएस2005 समर्थन/एमपी करता है लेकिन यह अनियंत्रित है। – Puppy

+0

वीएस2005 पहले ही परियोजना निर्भरताओं की बाधाओं के भीतर एमपी मशीनों पर समवर्ती संकलन करेगा। –

0

आप समाधान में परियोजनाओं के एक बहुत कुछ है, तो उनमें से कुछ को हटा दें। यदि उन्हें परियोजनाओं के रूप में संदर्भित किया गया है तो आप इसके बजाय बाइनरी आउटपुट का संदर्भ दे सकते हैं (जोड़ें संदर्भ संवाद में ब्राउज़ बटन का उपयोग करें)। यह समाधान में बहुत निर्भरता की जांच को हटा देता है। यह आदर्श नहीं है लेकिन यह गति की चीजें करता है।

3
  • Unity builds
  • Precompiled headers
  • विंडोज 7 विंडोज एक्सपी से बहुत तेज बनाता है (यदि यह आपके लिए प्रासंगिक है)।
  • एंटी-वायरस स्कैनर बंद करें।
  • निर्भरता को कम करें (यानी #include हेडर फ़ाइलों से है)।
  • टेम्पलेट कोड की मात्रा को कम करें।
3

कोड स्तर पर, अन्य शीर्षकों द्वारा शामिल शीर्षकों की मात्रा को कम करने में मददगार है। फ़ाइलों को बार-बार लोड करना और पढ़ना एक बड़ा प्रभाव हो सकता है। इसके बजाय, जहां भी संभव हो, चीजें घोषित करें। उदाहरण के लिए:

#include <iosfwd> 
#include <string> 
#include "M.h" 
#include "R2.h" 
#include "A2.h" 

class M2; 
class A; 
class R; 
template<class C> class T; 

class X{ 
    M member; // definition of M is required 
    M2 *member2; // forward declaration is sufficient for pointers & references 
public: 
    // forward declaration of argument type A is sufficient 
    X(const A &arg); 

    // definition required for most std templates and specializations 
    X(const std::string &arg); 

    // forward declaration of your own templates is usually okay... 
    void f(T<int> t); 

    // unless you're defining a new one. The complete definition 
    // must be present in the header 
    template<class Z> 
    void whatever(){ 
    // blah blah 
    } 

    R f(); // forward declaration of return type R is sufficient 

    // definitions of instantiated types R2 and A2 are required 
    R2 g(A2 arg){ 
    return arg.h(); 
    } 

    // ostream is forward-declared in iosfwd 
    friend std::ostream &operator << (std::ostream &o, const X &x); 
}; 

इस वर्ग के उपयोगकर्ता #include यदि वे वास्तव में X(const A&), f(t<int>), f(), या operator << के किसी भी फोन जो कुछ फ़ाइलों वर्ग परिभाषाओं प्रदान करना होगा।

टेम्पलेट्स लगभग निश्चित रूप से शामिल किए जाने के भूमि के ऊपर करने के लिए जोड़ देगा। मेरी राय में यह आमतौर पर उनकी शक्ति के लायक है। जब आप अपना खुद का टेम्पलेट बनाते हैं, तो पूर्ण परिभाषा हेडर फ़ाइल में रहनी चाहिए; यह अलग संकलन के लिए एक सीपीपी फ़ाइल में नहीं जा सकता है। मानक टेम्पलेट्स को आगे घोषित नहीं किया जा सकता है, क्योंकि कार्यान्वयन को अतिरिक्त टेम्पलेट पैरामीटर (डिफ़ॉल्ट तर्क के साथ) प्रदान करने की अनुमति है और टेम्पलेट्स की अग्रेषित घोषणाओं को सभी टेम्पलेट पैरामीटर सूचीबद्ध करना होगा। Iosfwd हेडर आगे-सभी मानक स्ट्रीम टेम्पलेट्स और कक्षाओं को अन्य चीजों के साथ घोषित करता है। जब तक आप किसी भी विशेषज्ञता को तत्काल नहीं देते हैं, तब तक आपके स्वयं के टेम्पलेट्स को अग्रेषित किया जा सकता है।

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

0

हमारे द्वारा उपयोग किया गया समाधान IncrediBuild था। बस समस्या पर अधिक हार्डवेयर फेंक दें। सभी डेवलपर मशीनों के अलावा (काफी शक्तिशाली) हमारे पास कई 4-कोर सर्वर संकलन के अलावा कुछ भी नहीं कर रहे थे।

0

"कोई भी सीपीयू" विकल्प जो दृश्य stdio के शीर्ष फिर अपने कार्यक्रम का निर्माण गति निश्चित रूप से बढ़ जाएगी पर दिया जाता है पर अपने समाधान मंच बदलें।

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