2010-09-27 21 views
6

मैंने खोजने की कोशिश की, लेकिन अब तक कोई भाग्य नहीं है। क्या किसी को भी एक अच्छा संसाधन पता है कि कैसे ठंडा प्रारंभ अनुकूलन करना चाहिए?शीत स्टार्टअप अनुकूलन

प्रश्न में ऐप सी ++/एमएफसी ऐप है, जो वीएस -2010 के साथ संकलित है, पूर्ण संस्करण, प्रोफाइलर में निर्मित के साथ। गर्म भार के लिए लोड समय स्वीकार्य होने के लिए मैंने सभी अतिरिक्त वजन कम करने की कोशिश की है, लेकिन ठंडी शुरुआत केवल अस्वीकार्य है। कभी-कभी 30 सेकंड के करीब, और ऐसा कुछ भी नहीं है जो धीमा कोड के अनुसार हो। गर्म शुरुआत के दौरान सीपीयू भार 80% मारा, और ठंड शुरू होने के दौरान 20% से नीचे रहना।

मैंने आज देरी-लोड लिंकर सेटिंग्स के साथ खेलने की कोशिश की, लेकिन मुझे समझ में नहीं आता कि वे प्रदर्शन को कैसे प्रभावित करते हैं। इसके अलावा, मैंने निष्पादन योग्य पैकर की कोशिश की, लेकिन वीएम पर परीक्षण तेजी से नहीं लग रहा था। क्या मैं कुछ और कोशिश कर सकता हूं?

उत्तर

1

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

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

क्या आपने प्रोमोमन (www.sysinternals.com) जैसे टूल को देखने के लिए प्रयास किया है कि कौन सी फाइलें छू रही हैं?

+0

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

+0

@ मैडमैन: तो आपको इन डीएलएल से लिंक नहीं करना चाहिए, वीएस में अपनी सेटिंग्स देखें और उन्हें हटा दें। जितना अधिक आप लोड करेंगे, धीमे आप होंगे। –

+0

@Maththieu - मुझे लगता है कि समस्या यह है कि वह उन डीएलएल से जुड़ी व्याख्या नहीं है, उन्हें अन्य भागों में खींच लिया गया है। लेकिन यह देखते हुए कि आईई को ठंड शुरू करने में 30 सेकंड नहीं लगते हैं (और संभवतया वास्तव में कभी भी ठंडा नहीं होता है), यह नहीं लगता कि यह केवल वेब नियंत्रण है जो समस्या है। –

2

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

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

उस ने कहा, 30 सेकंड एक हेलुवा लंबे समय तक है। सुनिश्चित करें कि यह सिर्फ आपकी देव मशीन पर कोई समस्या नहीं है, जो बार-बार बाइनरी बनाकर प्रेरित होती है और उन्हें डिस्क पर बिखरी हुई है। रन Defraggler। इसके बाद, जांचें कि यह SysInternals 'ProcMon उपयोगिता के साथ क्या कर रहा है।

+0

क्या COM सर्वर के लिए कुछ प्रकार का अनुकूलन है? मेरे पास एकाधिक COM घटक हैं - एमएसएक्सएमएल, एमएस वेब ब्राउज़र नियंत्रण, और कुछ आंतरिक घटक जिन्हें मैं इस एप्लिकेशन में उपयोग करता हूं, लेकिन ऐसा लगता है कि वे अंत में डीएलएल के रूप में लोड होते हैं। – Coder

+0

ठीक है, sorta। यह सिर्फ इतना है कि उनके डीएलएल मांग पर लोड हो जाते हैं। CoCreateInstance कॉल द्वारा, यह एक अंतर्निहित डीएलएल निर्भरता नहीं है जैसे आप आयात को जोड़कर प्राप्त करते हैं। Lib। जो आपके WinMain() चलने शुरू होने से पहले भी लोड हो जाते हैं। यह बहुत ही चीज़/DELAYLOAD जैसा ही है। –

1

"मैंने आज देरी-लोड लिंकर सेटिंग्स के साथ खेलने की कोशिश की, लेकिन मुझे समझ में नहीं आता कि वे प्रदर्शन को कैसे प्रभावित करते हैं।"

जब आप एक DLL से लिंक निर्भरता यह इसे लोड करता है सामने - जब निष्पादन पहले भरी हुई है। देरी लोडिंग यह सुझाव देती है कि लोड होने में देरी हो रही है, जब तक कि वास्तव में इसकी आवश्यकता नहीं होती है - जब डीएलएल में एक प्रकार या विधि निष्पादन योग्य द्वारा पहली बार उपयोग की जाती है, यानी आप इसे मॉड्यूल स्तर पर lazy initialization के रूप में सोच सकते हैं।

लिंकर LoadLibrary और GetProcAddress पर प्रभावी रूप से स्टब का उपयोग कर रहा है। एक बार जब डीएलएल लोड हो जाता है तो स्टब ओवरराइट हो जाता है ताकि कॉल सीधे डीएलएल को सीधे कर दी जाए।

इसका लाभ उठाने के लिए आपको कोड पथों को देखने की आवश्यकता है - कौन सी चर या विधि कॉल का उपयोग सशर्त रूप से किया जाता है या मुख्य स्क्रीन पर नहीं, इस स्थिति में उन्हें सामने लोड करने की आवश्यकता नहीं होती है।

+0

लेकिन यह विरासत निर्भरताओं में मदद नहीं करता है, या यह करता है? उदाहरण के लिए यदि एमएस वेब ब्राउज़र नियंत्रण किसी प्रकार की मल्टीमीडिया/पीडीएफ प्लगइन आयात करने का फैसला करता है, तो यह अभी भी वेब ब्राउज़र घटक CoCreate कॉल के दौरान लोड किया जाएगा, है ना? – Coder

+0

हां, यह आपके नियंत्रण से बाहर होगा; लेकिन आप COM ऑब्जेक्ट को तुरंत चालू करने में देरी करने का प्रयास कर सकते हैं जो इस मामले में मूल निर्भरता है। –

0

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

प्रोफाइलर कुछ भी नहीं है, लेकिन आपको यह पता लगाना होगा कि वास्तव में क्या चल रहा है।

Here's a way to do that.

निश्चित लोड हो रहा है DLLs एक बड़ा स्टार्टअप समस्या हो सकती है, लेकिन वहाँ के रूप में अच्छी चल रहा अन्य बातों हो सकता है। उदाहरण मैंने पाया है: अंतर्राष्ट्रीयकृत तार तारों को पुनर्प्राप्त करना (जिसे होने की आवश्यकता नहीं थी)। डेटा संरचना का निर्माण, विंडोज & नियंत्रण, फिर उन्हें नष्ट करना और उन्हें फिर से बनाना मेनू और पेड़-विचारों के रूप में आबादी हो रही है। अगर अवशोषण का पेड़ गहरा है, तो वास्तव में अजीब चीजें हो सकती हैं।