2010-06-23 57 views
6

मेरे पास एक ऐसा एप्लिकेशन है जो System.Timers.Timer ऑब्जेक्ट्स का उपयोग समाप्ति और ईमेल अधिसूचनाओं और ऐसे करने के लिए करता है। वर्तमान में सिस्टम में एक बार में दो सौ टाइमर जीवित हैं, लेकिन हम ऐप के उपयोग को विस्तारित करने जा रहे हैं और यह संख्या हजारों (शायद 10,000 से अधिक नहीं) में स्केलिंग शुरू कर सकती है।कितने System.Timers.Timer उदाहरण मैं बना सकता हूं? मैं कितना दूर स्केल कर सकता हूं?

मुझे टाइमर की संख्या को स्केल करने पर कोई जानकारी नहीं मिल रही है, इसलिए मुझे लगता है कि यह कोई समस्या नहीं होगी। क्या किसी को पता है कि यह एक समस्या होने जा रहा है और मुझे वांछित तरीके से निपटने के तरीके को बदलने में सक्रिय रूप से देखना चाहिए?

+0

मेरे पास थ्रेडिंग.Timer के बारे में एक समान सवाल है। – GregC

+1

@ ग्रेगसी, क्या आप इसे एक लिंक पोस्ट कर सकते हैं ताकि मैं उन उत्तरों को देख सकूं? – tster

उत्तर

11

एक छोटी सी के लिए सवाल पैदा, मुझे पता है, लेकिन। । ।

System.Timers.TimerSystem.Threading.Timer के आसपास एक रैपर है, जो बदले में विंडोज़ Timer Queues के आसपास एक .NET wrapper है। टाइमर कतार टाइमर बहुत हल्के होते हैं - कुछ सिस्टम संसाधनों का उपयोग करें। मैंने हजारों टाइमर तक नहीं बढ़ाया है, लेकिन सैकड़ों टाइमर बस ठीक काम करते हैं। मैं थोड़ा सा कार्यान्वयन करने में सक्षम हूं, मैं कल्पना नहीं कर सकता कि हजारों टाइमर के साथ कोई परेशानी होगी।

शायद किसी विशेष टाइमर कतार में आपके पास टाइमर की संख्या पर कुछ सीमा हो सकती है। मुझे नहीं पता कि वह सीमा क्या है। जब मैंने एक साल या उससे पहले इन टाइमर की जांच की, तो ऐसा लगता था कि .NET Framework प्रति प्रक्रिया एक टाइमर कतार बनाता है (या शायद यह प्रति ऐप डोमेन था), और आपके द्वारा बनाए गए सभी टाइमर उस कतार में डाल दिए जाते हैं।

शायद यह आपके सिस्टम को बनाकर टाइमर कतार कार्यक्षमता को डुप्लिकेट करने का अर्थ नहीं है जो एक टाइमर और कुछ प्रकार की प्राथमिकता कतार तंत्र का उपयोग करता है जिसे अगली कहा जाता है उसे नियंत्रित करने के लिए। टाइमर कतार आपके लिए पहले से ही यही है।

ऐसा लगता है कि आप आसानी से एक परीक्षण कार्यक्रम बना सकते हैं जो 10,000 टाइमर बनाता है। आखिरी के बाद एक सेकंड को टिकने के लिए प्रत्येक सेट करें, और इसकी अवधि 10,000 सेकंड पर सेट करें। फिर वापस बैठो और इसे टिकटें। या आपका प्रोग्राम ट्रैक रखता है कि कौन आगे टिकेगा और वास्तव में कौन आगे टिकता है।

0

केवल एक टाइमर का उपयोग करने के बारे में कैसे? टाइमर पहली समाप्ति पर समाप्त हो जाएगा और समाप्ति पर उपयुक्त तर्क करेगा। फिर अगली समाप्ति पर इसके अंतराल को रीसेट करें? केवल एक टाइमर का उपयोग करके समाप्ति को संभालने का एक और तरीका।

+2

स्पष्ट रूप से बहुत सारे टाइमर का उपयोग न करने के कई तरीके हैं। हालांकि, मैं सोच रहा हूं कि कोड बदलने के लायक है या नहीं। – tster

0

यदि आप रुचि रखते हैं, तो मौलिक ओएस संसाधन देखें कि टाइमर क्लास सिस्टम डीएलएल पर परावर्तक का उपयोग करके निर्भर करता है।

फिर इस पर देर मार्क Russinovich http://blogs.technet.com/b/markrussinovich/

0

आपको उनमें से बहुत से उपयोग करना चाहिए। लेकिन pdiddy की तरह कहते हैं, यदि आप कर सकते हैं, तो आपको वास्तव में अपना कोड बदलने पर विचार करना चाहिए। 1 बनाम 10.000 टाइमर एक फर्क पड़ता है। ;-)

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