2011-11-23 14 views
23

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

मैंने मानक दृष्टिकोण की कोशिश की है, लेकिन मुझे वास्तव में उच्च गुणवत्ता वाले आउटपुट की आवश्यकता है, और इसमें ग्राफ और SEARCH_INCLUDES शामिल हैं। मेरे पास डोक्सीजन चलाने के लिए काफी अच्छी मशीन है, लेकिन डॉक्सिजन अपने कई कोर का लाभ नहीं उठाता है। (यह बिल्ड सर्वर पर एक सिंगल सीपीयू चिपकाता है, लेकिन उपलब्ध सिस्टम का केवल 4% है।) मल्टीथ्रेडेड डॉट बिल्ड करना आसान है, हालांकि यह बिल्ड समय का केवल आधा या तो है।

क्या ऐसी कोई तकनीक है जिसका उपयोग मैं कई प्रक्रियाओं के माध्यम से डॉक्सिजन चलाने के लिए कर सकता हूं और मैन्युअल रूप से कार्य को दाढ़ी देता हूं? मैंने टैग फ़ाइलों को बनाने के बारे में कुछ बात देखी है, लेकिन मुझे उनके बारे में पर्याप्त जानकारी नहीं है कि वे क्या चाहते हैं कि वे क्या करेंगे। क्या मैं के लिए देख रहा हूँ की तरह कुछ है:

doxygen Doxyfile-folder1 
doxygen Doxyfile-folder2 
doxygen Doxyfile-folder3 
doxygen Doxyfile-folder4 
doxygen-join output/folder1/html output/folder2/html output/folder3/html output/folder4/html 
बेशक

, मैं सिर्फ बना रही हूँ सामान ऊपर है, लेकिन है कि मैं क्या देख रहा हूँ की एक विचार है। इसके अलावा, मैं 4 से अधिक प्रक्रियाओं का उपयोग करता हूं।

+0

क्या सर्वर के पास पूरे कोडबेस को कैश किए जाने और स्वैप किए बिना डॉक्सिजन चलाने के लिए पर्याप्त रैम है? – mpartel

+2

अधिक रैम और/या तेज हार्ड ड्राइव। एक 80 जीबी एसएसडी उठाओ और उस पर अपना कोड डालें। आईओ गहन सॉफ्टवेयर जो आधुनिक ठोस राज्य हार्ड ड्राइव से काफी लाभान्वित होगा। –

+1

ठीक है, वर्तमान में यह 10k ड्राइव की RAID 10 सरणी पर बैठा है, इसलिए यह धीमा नहीं होना चाहिए ... – alficles

उत्तर

50

टैग फ़ाइलों आम तौर पर अगर

  1. आप तार्किक रूप से सुसंगत स्रोत फ़ाइलों की एक संख्या है जाने का रास्ता है और
  2. आप घटकों, जैसे के बीच निर्भरता पता (उन्हें घटकों कॉल) घटक ए घटक बी और सी का उपयोग करता है, और घटक बी केवल सी का उपयोग करता है, और
  3. यह ठीक है (या यहां तक ​​कि पसंदीदा) कि इंडेक्स फाइलें (जैसे फाइल/कक्षाओं/कार्यों की सूची) एक घटक तक सीमित हैं।
  4. आप HTML आउटपुट में रुचि रखते हैं।

एक टैग फ़ाइल मूल रूप से दस्तावेजों में स्थान के लिंक के साथ प्रतीकों की एक संरचित सूची है। टैग फाइलें एक घटक के दस्तावेज से दूसरे के लिए लिंक बनाने के लिए डॉक्सिजन की अनुमति देती हैं।

यह एक 2 चरणों वाली प्रक्रिया है:

  1. सबसे पहले आप प्रत्येक घटक पर Doxygen चलने वाले घटक के लिए टैग फ़ाइल उत्पन्न करने के लिए। आप सभी आउटपुट को अक्षम करके और GENERATE_TAGFILE का उपयोग करके ऐसा कर सकते हैं। घटक एक के लिए तो, एक Doxyfile.tagonly निम्न सेटिंग्स होगा:

    GENERATE_HTML   = NO 
    GENERATE_LATEX  = NO 
    GENERATE_RTF   = NO 
    GENERATE_MAN   = NO 
    GENERATE_TAGFILE  = compA.tag 
    

    आप देखेंगे कि इस तरह से Doxygen चल बहुत तेज है।

  2. दूसरा चरण वास्तविक दस्तावेज उत्पन्न करना है। घटक ए के लिए आपको एक डॉक्सफाइल की आवश्यकता होती है जिसमें घटक बी और सी की टैग फ़ाइलें शामिल होती हैं क्योंकि हमने निर्धारित किया है कि ए इन घटकों पर निर्भर करता है।

    GENERATE_HTML   = YES 
    GENERATE_LATEX  = NO 
    GENERATE_RTF   = NO 
    GENERATE_MAN   = NO 
    TAGFILES    = path/to/compB/compB.tag=path/to/compB/htmldocs \ 
             path/to/compC/compC.tag=path/to/compC/htmldocs 
    

इस दृष्टिकोण मैं एक मानक डेस्कटॉप पीसी पर 3 घंटे के तहत में 1500 + घटकों पर वितरित कोड का 20M + लाइनों के लिए प्रलेखन (8Gb रैम और लिनक्स 64 बिट के साथ Core i5) उत्पन्न करने के लिए सक्षम किया गया है का उपयोग करना, स्रोत ब्राउज़िंग, पूर्ण कॉल ग्राफ़, और सभी डेटा संरचनाओं के यूएमएल-शैली आरेखों सहित। ध्यान दें कि पहले चरण में केवल 10 मिनट लग गए।

इसे पूरा करने के लिए मैंने घटकों की सूची और उनकी प्रत्यक्ष निर्भरताओं के आधार पर प्रत्येक घटक के लिए डोक्सीफाइल उत्पन्न करने के लिए एक स्क्रिप्ट बनाई। पहले चरण में मैं समांतर में डॉक्सिजन के 8 उदाहरण चलाता हूं (http://www.gnu.org/s/parallel/ का उपयोग करके)। दूसरे चरण में मैं समानांतर में डॉक्सिजन के 4 उदाहरण चलाता हूं।

टैग फ़ाइलों के बारे में अधिक जानकारी के लिए http://www.doxygen.org/external.html देखें।

+0

मुझे यकीन नहीं है कि यह पहले क्या था, लेकिन Doxygen 1.8.2 के साथ मुझे 'GENERATE_HTML = हाँ फ़ाइल टैग उत्पन्न करते समय ("मास्टर" बिल्ड लिंक किए गए प्रोजेक्ट्स के लिए HTML दस्तावेज़ उत्पन्न नहीं करता है)। –

+2

@doxygen - डॉक्सिजन दस्तावेज़ में, टैग फ़ाइलों को "बाहरी दस्तावेज से लिंक करना" (http://www.doxygen.org/external.html) में पेश किया गया है। हालांकि यह प्रारंभिक उद्देश्य प्रतीत होता है, टैग फ़ाइलों को अन्यथा भी इस्तेमाल किया जा सकता है, उदा। उपर्युक्त उत्तर के अनुसार, कई संबंधित (आंतरिक) परियोजनाएं। यदि ऐसा है, तो यह दस्तावेज़ों के अनुसार व्यवस्थित रूप से अपडेट किया जाएगा, उनके लोगों को बेहतर व्यवस्थित करने और/या उनके दस्तावेज़ों को अनुकूलित करने के लिए। – amolbk

+0

क्या आप "घटक की सूची और उनकी प्रत्यक्ष निर्भरताओं के आधार पर प्रत्येक घटक के लिए Doxyfile उत्पन्न करने के लिए स्क्रिप्ट" पर विस्तार कर सकते हैं? – spy

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