2010-08-27 29 views
6

मैं अपने आवेदन के स्टार्टअप समय को प्रोफाइल करने की कोशिश कर रहा हूं, इसलिए मैंने एक छोटा सी # प्रोग्राम लिखा है जो Process.Start() विधि का उपयोग करके अपना एप्लिकेशन शुरू करेगा, और इसे स्टॉपवॉच का उपयोग करने का समय होगा।जब मैं Process.Start() का उपयोग करता हूं तो मेरा एप्लिकेशन स्टार्टअप समय धीमा क्यों होता है?

जब मैं एप्लिकेशन को स्वयं शुरू करने का प्रयास करता हूं (केवल उस पर क्लिक करके), तो इसमें शायद 2-3 सेकंड लगते हैं। जब मैं अपने परीक्षण कार्यक्रम का उपयोग कर आवेदन शुरू करने का प्रयास करता हूं, तो इसमें 8-10 सेकंड लगते हैं। स्टार्टअप समय लगातार उस परिमाण में भिन्न होता है।

किसी भी विचार का उपयोग क्यों करें। निष्पादन योग्य प्रारंभ करने के लिए स्टार्टअप स्टार्टअप समय को इतना प्रभावित करेगा?

+0

क्या आप इसे डीबगर के तहत चला रहे हैं? या रिलीज मोड में? क्या आप इसे विजुअल स्टूडियो या कमांड लाइन पर शुरू कर रहे हैं? –

+0

मैं इसे रिलीज़ मोड में चला रहा हूं, और कमांड लाइन – dreadpirateryan

उत्तर

1

आपकी सभी मदद के लिए धन्यवाद। मेरे पास जवाब है, और यह प्रक्रिया से संबंधित नहीं है। स्टार्ट।

प्रक्रिया शुरू करने के बाद, मैं एक विशिष्ट विंडो हैंडल को यह जानने के लिए इंतजार कर रहा था कि ऐप वास्तव में दिखाया गया है। लूप बहुत तंग था। मैंने लूप में 200 मीटर की नींद की शुरुआत की, और स्टार्टअप समय फिर सामान्य था।

+0

dreadpirateriyan, कृपया इसे उत्तर के रूप में चुनें, भले ही यह स्वयं से दूसरों को यह तेज़ी से ढूंढने में मदद करें। – Marcel

0

आपकी सुराग Process.Start()System.Diagnostics नामस्थान में होना चाहिए। जब आप इस तरह से एक प्रक्रिया शुरू करते हैं, तो आप इसके लिए मॉनीटर/इंस्पेक्टरों का एक समूह संलग्न कर रहे हैं। यह निश्चित रूप से एक ओवरहेड जोड़ता है।

आप तुरंत Process वस्तु पर Dispose() बुला के बाद आप इसे प्रारंभ (क्रम अनावश्यक रूप से लंबे समय तक-प्रक्रिया की निगरानी से बचने के लिए) की कोशिश करना चाहते हो सकता है, लेकिन आप पूरी तरह से जुड़े ओवरहेड्स से बचने के लिए सक्षम नहीं होगा।

+0

से मुझे प्रसंस्करण के उपयोग के बारे में प्रलेखन में कुछ भी दिखाई नहीं देता है। परिणामस्वरूप स्पॉन्डेड एप्लिकेशन के लिए धीमी रनटाइम प्रदर्शन होता है। क्या आपके पास कोई लिंक है? मुझे उस पर पढ़ने में दिलचस्पी होगी। –

0

बस शब्दों में कहें, आप वास्तव में केवल दो प्रक्रिया शुरू कर रहे हैं। यही कारण है कि इसमें अधिक समय लगता है।

जब आप अपने ऐप पर डबल क्लिक करते हैं, तो आप केवल एक एप्लिकेशन लोड कर रहे हैं और यह सब डीएलएल है।

जब आप अपना डायग्नोस्टिक ऐप चलाते हैं, तो आप पहले अपने .NET असेंबली के साथ पहला एप्लिकेशन लोड कर रहे हैं जिसे JIT'd होना चाहिए (बस समय संकलन: जो मुफ़्त नहीं है)। उसके बाद ही सब कुछ किया जाता है, तो दूसरा एप्लिकेशन शुरू हो जाता है। यदि आपका लक्ष्य ऐप भी .NET ऐप है, तो पूरा चक्र स्वयं को दोहराता है।

+1

वह इसे स्टॉपवॉच के साथ समय दे रहा है, इसलिए संभवतः वह प्रक्रिया के स्टार्टअप समय को माप रहा है, न कि अपने परीक्षण ऐप के स्टार्टअप समय को। –

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

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