2010-03-10 26 views
7

का उपयोग कर कई लंबी-विधियों के लिए सर्वोत्तम अभ्यास मेरे पास एक ऐसा फॉर्म है जिसमें कई लंबी-विधियां हैं। मेरी खोज है: सबसे अच्छा अभ्यास क्या है? अज्ञात विधि और केवल एक पृष्ठभूमि कार्यकर्ता का उपयोग करें या प्रत्येक लंबी विधि में BackgroundWorker का एक उदाहरण बनाएं।पृष्ठभूमि कार्यकर्ता

कृपया मदद करें। धन्यवाद।

+0

लंबे समय तक चलने वाले कोड या लंबे समय तक लाइनों के रूप में लंबे समय तक? –

+0

लंबे समय तक चलने के रूप में लंबे समय तक। – wallybh

उत्तर

2

मैं व्यक्तिगत रूप से आपके प्रत्येक कार्य के लिए BackgroundWorker के एक उदाहरण का उपयोग करता हूं। हालांकि, ध्यान रखें कि आप थ्रेड के कई अलग-अलग उदाहरणों में एक ही प्रतिनिधि विधि को कई बार कॉल कर सकते हैं।

एक पृष्ठभूमि कार्यकर्ता प्रति लंबे विधि कार्य करके, आप अपने तरीकों पर बहुत अधिक नियंत्रण रखेंगे। इसके अलावा, जहां तक ​​मेरी समझ जाती है, एक बार पृष्ठभूमिवर्कर का एक कार्य करने के बाद, यह इस पृष्ठभूमि कार्य में व्यस्त है और इसलिए इसे दूसरों के लिए अनुपलब्ध बना रहा है। हालांकि मैं शायद गलत हो सकता हूं, लेकिन वैसे भी मैं ऐसा करूँगा, क्योंकि आपका DoWork() ईवेंट हैंडलर केवल यही कर सकता है जो इसे इस पृष्ठभूमिवर्कर के लिए करने के लिए कहा जाता है। इसलिए, पृष्ठभूमि वर्कर के केवल एक उदाहरण के लिए मुझे पूरी तरह से अलग-अलग कार्यों को निष्पादित करना असंभव लगता है।

क्या इससे मदद मिलती है?

+0

हां, यह मदद। मेरे लंबे तरीकों से लगातार रन नहीं होते हैं। मैं आपको सिफारिश का उपयोग करूंगा। गरीब अंग्रेजी के लिए खेद है ... – wallybh

+1

परेशान मत हो, मैं फ्रैंकोफोन हूँ! = पी Hehehe ... –

+1

शायद यह आपकी मदद करेगा अगर आप अपने लंबे समय तक चलने वाली विधि को अपने decouple विभाजित;) कई छोटे टुकड़ों में और छोटे टुकड़े अन्य कई पृष्ठभूमिवर्क्स में schred। यह सब निर्भर करता है अगर इन तरीकों को कोड के छोटे टुकड़ों में चबाया जा सकता है, यदि आप देखते हैं कि मेरा क्या मतलब है। –

2

सारांश में: एक BackgroundWorker में

लाभ:

  1. आप एक से अधिक विधि के लिए निष्पादन के आदेश नियंत्रित करते हैं। हालांकि, यह भी एक नुकसान है, क्योंकि यदि आप एकाधिक पृष्ठभूमिवर्कर्स का उपयोग करते हैं, तो आप "मान लें" उन्हें समानांतर रूप से निष्पादित किया जाता है और आदेश के बारे में चिंता करने की आवश्यकता नहीं होती है;

  2. थ्रेड निर्माण और निपटान के लिए कम ओवरहेड (यदि संभव हो, तो हर बार एक ही उदाहरण का उपयोग करें, लेकिन प्रक्रिया शुरू होने के आधार पर यह हमेशा संभव नहीं होता है। यदि आप इसे समवर्ती रूप से करना चाहते हैं तो यह संभव नहीं है);

  3. यदि आप थ्रेड के बीच संवाद करना चाहते हैं, तो आप बैच संचार जमा कर सकते हैं और इसे अधिक कुशलता से कर सकते हैं। इसके अलावा, यह आपको उस संचार में से कुछ बचा सकता है यदि सभी विधियां एक ही थ्रेड में चलती हैं।

कई BackgroundWorkers में लाभ:

  1. ऊपर उल्लिखित समानांतरवाद;

  2. प्रत्येक एंड-ऑफ-प्रोसेस किसी अन्य प्रतिनिधि का उपयोग कर सकती है और इसलिए कुछ अन्य ऑपरेशन कर सकती है।

उम्मीद है कि यह मदद करता है!

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