2011-02-17 37 views
8

के कारण बड़े सी # समाधान के साथ टीडीडी लगभग असंभव असंभव है, मैं वर्तमान में 60 असेंबली के साथ एक बड़े समाधान पर काम कर रहा हूं। कई असेंबली हैं जो समाधान के लिए सामान्य भागों को परिभाषित करती हैं, और फिर सिस्टम में कुछ प्रविष्टि बिंदु असेंबली होती हैं।धीमी संकलन गति

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

अपने वर्तमान 75seconds से निर्माण समय को स्वीकार्य 5 सेकंड या उससे अधिक समय तक लाने के लिए सबसे अच्छा अभ्यास क्या है? इससे टीडीडी फिर से व्यवहार्य हो जाएगा।

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

+0

देखना भी http (करने के बाद एक तेजी से निर्माण भी अपने रिफैक्टरिंग तेजी से कर देगा!): // stackoverfl ow.com/questions/55517/very-slow-compile-times-on-visual-studio/5432452#5432452 –

+0

सरल उत्तर आपकी परियोजना संरचना पर पुनर्विचार करना है। उनके बीच स्पष्ट परतों और इंटरफेस को परिभाषित करें जैसे कि एक परत में परिवर्तन सभी तरह से "लहर" नहीं करता है। इंटरफेस को क्लाइंट द्वारा साझा की गई असेंबली में ले जाना और कार्यान्वयन आम तौर पर अच्छी तरह से बदलाव को अलग करता है। – Gishu

उत्तर

16

आईएमएचओ समस्या यहां निहित है: "जैसा कि परीक्षण असेंबली समाधान की विभिन्न परतों का संदर्भ देता है।"
आपके पास प्रति असेंबली प्रति टेस्ट असेंबली होनी चाहिए जिसे आप परीक्षण करना चाहते हैं।
जब भी आप अपने प्रत्येक परीक्षण असेंबली में कई असेंबली का संदर्भ देते हैं, तो आपके पास एक अलग समस्या है: आप एकीकरण परीक्षण बना रहे हैं। टीडीडी में आप यही नहीं करना चाहते हैं।

आपके प्रश्न के अपडेट के अतिरिक्त:
आम तौर पर, आप कार्यान्वयन की तुलना में किसी अन्य असेंबली में इंटरफेस को परिभाषित करेंगे। इसलिए निम्न स्तर की कक्षा के कार्यान्वयन में बदलाव का उन उच्च स्तरीय वर्गों पर कोई प्रभाव नहीं होना चाहिए जो उन इंटरफेस का उपयोग करते हैं ...

+2

ऐसा करके वह एक ही समाधान में लगभग 120 परियोजनाओं के साथ समाप्त होगा। मैं इन सभी परियोजनाओं को बनाए रखने के लिए दर्द की कल्पना कर सकता हूं। वैसे, मैं इस से सहमत नहीं हूं 'अन्यथा आप एकीकरण परीक्षण बना रहे हैं'। – goenning

+2

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

5

पूरे समाधान को छोटे समाधानों में विभाजित करें जो परत आधारित (या इससे भी अधिक विशिष्ट) हैं और प्रत्येक को दें यूनिट परीक्षण का एक विशिष्ट सेट है। आप इस सवाल के साथ वास्तव में गंभीर नहीं हो सकते हैं 60 परियोजनाओं को एक समाधान में क्यों कोई भी इसके साथ काम करना चाहेगा? क्या आपके लिए एक घंटे के भीतर उनमें से 10 में बदलाव करना आम बात है?

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

यह आपके विकास को सामान्य टीडीडी में वापस लाएगा।

8

अन्य लोगों को, आप आदि refactor करने के लिए कहा है महान यदि आप करने में सक्षम हैं ...

कुछ अन्य चीजें हैं जो आसान कर रहे हैं करने के लिए कर रहे हैं:

  • बड़ा में छोटी परियोजनाओं कम्बाइन एक समाधान के निर्माण पर परियोजना प्रति बड़े ओवरहेड के रूप में परियोजनाएं। (प्रयोग nDepend अगर परतों में बुला नियंत्रित करने के लिए की जरूरत है, नियम "Code Query Language" में परिभाषित किया जा सकता है और फिर अपने निर्माण के हिस्से के रूप जाँच)

  • बनाओ सभी परियोजनाओं कुछ उत्पादन निर्देशिका में निर्माण और फिर सेट करने के लिए "स्थानीय कॉपी" सभी परियोजना संदर्भों पर झूठा - इससे कम आईओ के कारण बड़ी गति हो सकती है।

  • यह देखने के लिए कि क्या यह बहुत अंतर करता है, अपने वायरस चेकर को चालू करें; यदि ऐसा है तो faster virus checker खोजें, या वायरस चेकर स्कैनिंग से "हॉट" फ़ोल्डर्स को

  • अपने कंपाइल इतने लंबे समय तक चलने के तरीके को देखने के लिए पेर्स मॉनिटर और sys आंतरिक टूल का उपयोग करें।

  • अपनी आउटपुट निर्देशिका को रखने के लिए रैम डिस्क पर विचार करें।

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

  • -

  • अधिक स्मृति समय पर एक बड़ा प्रभाव हो सकता है

    अनावश्यक परियोजना संदर्भ निकाल दें

(आप पहली बार अनावश्यक "usings" निकालना पड़ सकता है)

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