2011-01-20 6 views
6

चलाने के लिए बहुत कुछ लेता है मेरे पास 2 9 0+ इकाइयों के साथ एक डीआरआर है।कई इकाइयों के साथ डेल्फी परियोजना

संकलित एक्सई 50 एमबी है।

डीपीआर कोड अब इस तरह है:

begin 
    ShowMessage('Before Initialize'); 
    Application.Initialize; 

जब मैं दोगुना मुझे लगता है कि 8 सेकंड पहले मैं "प्रारंभ करने से पहले" देख पारित नोटिस बनाया exe पर क्लिक करें। क्या यह बड़े exe आकार की वजह से है? या इस बार कम करने का कोई तरीका है?

उत्तर

4

आपके प्रश्न के आधार पर, यह कुछ भी हो सकता है।

एकमात्र सलाह जो मैं आपको दे सकता हूं वह मापना है:
अपने सभी यूनिट प्रारंभिक अनुभागों में प्रत्येक प्रविष्टि/निकास के टाइमस्टैम्प लॉग करें।

अपनी टिप्पणी में से एक (जो आप अपने प्रश्न में जोड़ना चाहिए के रूप में यह और अधिक विस्तार का वर्णन करता है) के आधार पर:

WindowsCodecs.dll अपने इकाइयों में से एक से आरंभ नहीं हो जाता, शायद दूसरे में एक प्रारूप से एक या अधिक छवियों परिवर्तित।
उस रूपांतरण के परिणाम होने तक आपको रूपांतरण में देरी करनी चाहिए।

--jeroen

+0

मैं कैसे जांच सकता हूं कि कोड की कौन सी पंक्ति WindowsCodec.dll कहलाती है? – LaBracca

+1

यह कठिन हो सकता है; डेल्फी मॉड्यूल विंडो में आप क्या कर सकते हैं, WindowsCodec.dll की लोडिंग पर ब्रेकपॉइंट सेट करें, फिर ब्रेकपॉइंट के दौरान स्टैक देखें। –

+5

अंततः मैंने एकटाइम प्रोफाइलर परीक्षण डाउनलोड किया और मुझे तीसरी पार्टी लाइब्रेरी प्रारंभिक कोड में समस्या मिली। – LaBracca

17

आवेदन से पहले। आरंभ करें प्रत्येक इकाई के प्रत्येक प्रारंभिक खंड को निष्पादित किया जाता है। आपके पास कुछ कोड हो सकता है जिसमें समय लगता है।

इकाइयों की संख्या समस्या नहीं है। मेरे पास 1100+ इकाइयों वाला एक प्रोजेक्ट है, एक्सई 35 एमबी है और यह तत्काल शुरू होता है।

यदि आप नेटवर्क ड्राइव से शुरू कर रहे हैं या वास्तव में धीमी डिस्क से आप मंदी का अनुभव कर सकते हैं।

+4

आप निदान करने के लिए जहां कार्यक्रम स्टार्टअप के दौरान उस पर एक प्रोफाइलर (जैसे http://delphitools.info/samplingprofiler/) चिपके द्वारा अपने समय खर्च कर रहा है कर सकता है। –

+4

एंटीवायरस प्रोग्राम के कारण भी हो सकता है। – gabr

+5

त्वरित युक्ति: उपरोक्त के रूप में, आपके आवेदन में आरंभिक अनुभाग निष्पादित किए जाते हैं, लेकिन साथ ही, आपके घटकों के लिए प्रारंभिक अनुभाग निष्पादित किए जाते हैं। स्टार्टअप (60 सेकेंड तक देरी तक) में मिली एक बड़ी मंदी एक प्रिंटर-गुण-संवाद-घटक के कारण थी जो कि नेटवर्क प्रिंटर के गुणों को क्वेरी करने का प्रयास कर रहा था जिसे मैंने नियंत्रण कक्ष में स्थापित किया था, जो प्रतिक्रिया नहीं दे रहा था। मैप किए गए नेटवर्क ड्राइव और अन्य नेटवर्क संसाधन जो प्रतिक्रिया नहीं दे रहे हैं, और घटक प्रारंभिक समस्या समस्या हो सकती है। एपटाइम का उपयोग करें, जो आपके ऐप को प्रोफाइल करने के लिए आरएडी स्टूडियो एक्सई के साथ आता है। –

1

इकाइयों का प्रारंभिक अनुभाग आमतौर पर गति की समस्या नहीं है (जब तक कि आपके पास कुछ डेटाबेस-संबंधित सामग्री न हो)।

संसाधनों से TForm लोडिंग धीमा हो सकता है।

फ्लाई पर बनाए गए TForm को हमेशा बेहतर होता है, केवल तभी जब यह आवश्यक हो: - "प्रोजेक्ट" मेनू पर जाएं, फिर "विकल्प" चुनें, फिर "फॉर्म" टैब चुनें। - सभी अनिवार्य रूपों को बाएं सूची से दाएं "उपलब्ध" सूची में रखें। - कुछ कोड द्वारा अनुरोध पर फॉर्म बनाएं।

इकाई ही रहता है:

type 
    TOneForm = class(TForm) 
    .... 
    end; 

var 
    OneForm: TOneForm; 

लेकिन आप अनुरोध पर प्रपत्र बनाने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:

बजाय

अपने पूर्व

OneForm.ShowModal; 

इस तरह का उपयोग करता है कोड

if OneForm=nil then 
    OneForm := TOneForm.Create(Application); 
    OneForm.ShowModal; 

आपको एप्लिकेशन की लोडिंग बहुत तेज़ी से मिल जाएगी।

नोट: मैंने अभी पढ़ा है कि समस्या फॉर्म लोड होने से पहले थी। तो उपर्युक्त चाल इस विशेष समस्या के लिए काम नहीं करेगी। मैं जवाब रखता हूं क्योंकि यह दूसरों के लिए उपयोगी हो सकता है। मैं अगली बार बेहतर पढ़ूंगा। :(

सभी मामलों में, प्रारंभिकरण से बहुत सारे कोड चलाने के लिए एक अच्छा डिज़ाइन नहीं है। यह बहुत सारी वैश्विक वस्तुओं या चर की तरह लगता है ... refactoring यहां समझ सकता है ... :)

+0

हां, मेरी समस्या भी आवेदन से पहले है। इंटियाज़लाइज। – LaBracca

1

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

जेरोन के ब्लॉग इस डीबगिंग के लिए एक महान संसाधन पर मुझसे कहा:

http://wiert.wordpress.com/2010/07/21/delphi-great-post-by-malcolm-groves-about-debugging-initialization-and-finalization-sections/

उसने मुझे मैल्कम पेड़ों की ओर इशारा किया:

http://www.malcolmgroves.com/blog/?p=649

+1

ऑटो निर्माण चरण बनाने में 8 सेकंड लगने लगते हैं। –

+0

हां, मेरे पास सिर्फ 2 ऑटो डिज़ाइन डेटामैड्यूल हैं, लेकिन फिर भी कोड को निष्पादित नहीं किया गया है मेरी समस्या एप्लिकेशन से पहले है। आरंभ करें। – LaBracca

1

this question में अच्छा सुझाव का एक बहुत हैं ।

आपको पूरी तरह से यह सुनिश्चित करना चाहिए कि आप स्टार्टअप पर चीजें नहीं बना रहे हैं जिन्हें आपको तुरंत आवश्यकता नहीं है। यह आमतौर पर कई रूपों के साथ परियोजनाओं पर सबसे बड़ी लॉन्च देरी है।

आपके मामले में, लगता है कि बहुत सारे प्रारंभिक कोड को निष्पादित किया जा रहा है।

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