2012-08-27 11 views
5

मैं तृतीय पक्ष घटक का उपयोग कर रहा हूं जो एक समय में अधिकतम 25 केबी डेटा स्वीकार करता है। मैं अपने आवेदन से इस तीसरे पक्ष के घटक के लिए वस्तुओं की सरणी गुजर रहा हूँ।डेटा थ्रॉटलिंग सी #

हालांकि मेरे आवेदन लिखने वाले डेटा की मात्रा 25 केबी से अधिक है। मैं डेटाबेस से डेटा पुनर्प्राप्त कर रहा हूं और घटक को सीधे कॉल कर रहा हूं।

मैंने एप्लिकेशन में घटक का संदर्भ जोड़ा है। जिस डेटा को मैं घटक के पास गुजर रहा हूं वह ऑब्जेक्ट की सरणी है जिसमें आदिम और गैर आदिम प्रकार होते हैं।

मैं डेटा थ्रॉटलिंग को कैसे कार्यान्वित कर सकता हूं?

+2

कृपया कुछ और जानकारी जोड़ें, जैसे घटक को डेटा भेजा जा रहा है, यानी यह किस तरह का संचार है। –

+1

संचार की वास्तुकला और विधि क्या है? – ChrisBint

+0

आप सरणी, primitives में किस तरह की वस्तुओं को स्टोर करते हैं? –

उत्तर

5

आप अपने डेटाबेस में एक पंक्ति के आकार की गणना कर सकते हैं। उसके बाद हर बार जब आप कुछ पास करते हैं तो आप उस आकार को एक चर में जोड़ते हैं। उसी समय आप स्टॉपवॉच का उपयोग कर रहे हैं जो चलता है। बस जांचें कि Stopwatch.EllapsedSeconds 1 सेकंड से बड़ा है या नहीं। यदि हां स्टॉपवॉच को रीसेट करें और अपने वैरिएबल को उस आकार के साथ रीसेट करें जिसे आप पहले ही पास कर चुके हैं। यदि यह जांच नहीं है कि आपके द्वारा पहले से पारित आकार (चर की मात्रा) 25KB से बड़ा है या नहीं। यदि यह सही है System.Thread.Thread.Sleep(Math.Max(1000 - StopWatch.EllapsedMilliseconds, 0)) पर कॉल करें। लेकिन याद रखें कि आपको इसे एक अतिरिक्त धागे में करना है क्योंकि नींद पूरे धागे को अवरुद्ध करती है।

3

आपको अपने ऐप और घटक के बीच डेटा बफर लागू करना होगा।

  • लिखें विधि है जो एक बाइट सरणी और यह भंडार एक को स्वीकार करता है को लागू वर्ग 'इंटरफेस के सार्वजनिक ओर से एक वर्ग है कि यह स्वयं की आंतरिक धागा है,
  • बनाने: ऐसा करने के लिए सबसे अच्छा तरीका है कतार
  • आंतरिक थ्रेड कतार से डेटा के 25kb खंड तक लिखता है और 1 सेकंड के लिए सोता है, जो उस समय को लिखने के लिए लिया जाता है।

यदि डेटा स्ट्रीम निरंतर है और 25kbps की दर से उत्पादित किया गया है, तो आपको भी ध्यान रखना चाहिए, फिर आप घटक का उपभोग कर सकते हैं और आपकी कतार अधिक हो जाएगी।

2

एमएसडीएन में BufferedStream कक्षा उदाहरण देखें। आपको इसे अनुकूलित करने में सक्षम होना चाहिए ताकि आप अधिकतम प्रति सेकंड 25 केबी लिख सकें।

जब स्ट्रीम करने के लिए लिख रहे हैं, तो आप एक डेटा आकार निर्दिष्ट/लिखने पढ़ने के लिए, इसलिए यदि आप कहते हैं कि लिखने 25kb और यह 24kb देता है, आप जानते हैं कि आप अभी भी 1K लिख सकते हैं।

यदि यह 25 केबी के साथ आता है और बफर में अभी भी डेटा बकाया है, तो आप यह सुनिश्चित करने के लिए Thread.Sleep(1000) कर सकते हैं कि यह कोटा से अधिक न हो।

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