स्टेटिक सीए समाधान को मच्छ धीमा बनाता है। मेरे मामले में> बिना सीए के 2x धीमी गति से। हम इसे अक्षम कर सकते हैं लेकिन यह अपनी शक्ति खोने का बुरा निर्णय है। तो हम क्या कर सकते हैं?कोड विश्लेषण सुधार
सबसे पहले देखते हैं कि सीए कैसे काम करता है।
आप समाधान बनाते हैं। Msbuild संकलन लक्ष्य fxcopcmd.exe के बाद प्रत्येक प्रोजेक्ट में निर्माण को असेंबली के पथ के साथ बुलाया जाता है जिसका विश्लेषण किया जाना चाहिए। fxcopcmd। सीए एक्सएमएल लॉग उत्पन्न करता है जिसे वीएस (या शायद आउटपुट स्ट्रीम) द्वारा उपयोग किया जाता है। fxcopcmd.exe असेंबली लोड करता है (तेज़) और इसके समकालिक रूप से विश्लेषण करता है, इसलिए केवल एक सीपीयू लोड होता है और 3 (मेरे मामले में) कुछ भी नहीं कर रहा है। सीए समाप्त होने के बाद ही परियोजना निर्भरता श्रृंखला में अगली परियोजना बनाई गई है।
तो सीए में कमजोर जगह हम इसे सुधार सकते हैं - इसे सभी CPUs का उपयोग करने के लिए समानांतर में काम करने के लिए मजबूर करने के लिए।
मैं देख रहा हूँ इस तरह के समाधान
नकली fxcopcmd.exe कि MSBuild से पैरामीटर ले जाएगा, यह याद रखना और तुरंत (CA xml.log के माध्यम से MSBuild कि सब ठीक है और कोई त्रुटि वहाँ थे के लिए रिपोर्ट बनाने के लिए, या सफल फ़ाइल, या शायद स्ट्रीम ..)। तो MSBUILD अगली प्रोजेक्ट का निर्माण करेगा और उस समय हम सहेजे गए पैरामीटर के साथ वास्तविक fxcopcmd.exe को कॉल करेंगे ... यदि MSBUILD अगली प्रोजेक्ट पर fxcopcmd.exe को कॉल करेगा - हम एक और बार fxcopcmd.exe कॉल करेंगे ... तो वहां होगा कुछ प्रक्रियाएं हों जो सभी सीपीयू लोड करेंगी। वास्तविक fxcopcmd.exe समाप्त होने के बाद हम अपने एमएसबीयूआईएलडी लक्ष्य को कॉल कर सकते हैं जो संकलन के साथ microsoft.common.targtets से केवल सीए लक्ष्य को कॉल करेगा और हमारे नकली fxcopcmd.exe तत्काल रिपोर्टिंग परिणाम देगा (सीए उस समय समाप्त हो गया है और हमारे पास लॉग है) MSBUILD-VS के लिए।
आपको क्या लगता है? क्या यह सीए तेज होगा? माइक्रोसॉफ्ट ने ऐसे कर्मचारियों को क्यों नहीं बनाया और सीए में केवल एक सीपीयू का उपयोग किया?
आप एक अलग निर्माण कॉन्फ़िगरेशन क्यों नहीं करते हैं और केवल इसे सक्षम करते हैं? फिर आप चुन सकते हैं कि इसके साथ कब निर्माण करना है या नहीं। –