2008-10-30 21 views
11

मैं एक सी # प्रोग्राम विकसित कर रहा हूं, और मेरे पास एक ऐसा कार्य है जो बहुत अधिक CPU का उपभोग करता है। मैं इसे कोड द्वारा नियंत्रित करने का कोई तरीका जानना चाहता हूं (किसी बाहरी एप्लिकेशन के साथ नहीं) और CPU उपयोग के प्रतिशत को प्रतिबंधित करता हूं। उदाहरण के लिए, यदि यह 9 0% CPU उपयोग का उपयोग करता है, तो मेरा ऐप केवल 20% उपभोग करने के लिए, भले ही यह धीमा हो जाए। यह स्वचालित रूप से और ऐप के भीतर से किया जाना चाहिए। यदि आप एक कक्षा प्रदान करते हैं, तो यह शानदार होगा।सीपीयू उपयोग को सी # प्रोग्राम को कैसे प्रतिबंधित किया जाए?

+0

यह एक क्रैच की तरह लगता है: समस्या के बजाय लक्षण पर हमला करना। आप यह क्यों नहीं पोस्ट करते कि विधि क्या करने का प्रयास कर रही है और विधि को अनुकूलित करने में सहायता के लिए हमसे पूछें। –

+1

यह एक क्रैच हो सकता है लेकिन मैं इस विचार के लिए कुछ अनुप्रयोगों के बारे में सोच सकता हूं जैसे: सीपीयू बाध्य पृष्ठभूमि कार्य संख्याओं को क्रंच करने के लिए, ऑफिस पीसी के वितरित कंप्यूटिंग पर्यावरण में एक नोड, एक कृत्रिम बुद्धिमान कार्यक्रम जो मेरी निगरानी और सीखने के लिए उपयोग की आदतें –

+1

50% पर CPU उपयोग को कैप करने के लिए, इसे दोहरी कोर पर चलाएं; 25% टोपी के लिए, इसे क्वाड कोर पर चलाएं: डी – Alan

उत्तर

16

मुझे नहीं पता कि आप ऐसा कर सकते हैं, लेकिन आप Priority संपत्ति के माध्यम से निष्पादन थ्रेड की थ्रेड प्राथमिकता बदल सकते हैं। आप स्थापित करेगा द्वारा कि:

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

इसके अलावा, मुझे नहीं लगता कि तुम सच में यह टोपी करना चाहते हैं। अगर मशीन अन्यथा निष्क्रिय है, तो आप इसे कार्य के साथ व्यस्त होना चाहते हैं, है ना? थ्रेडप्रिरीटी शेड्यूलर को संवाद करने में मदद करता है।

+0

इससे कुछ मदद मिलेगी, और ऐसा करने के बारे में मुझे एकमात्र तरीका पता है। –

+0

यह सही तरीके से करने का सबसे अच्छा और एकमात्र तरीका है। – Will

+1

मैंने देखा है कि विंडोज ऐप्स स्वयं को कैप करने में सक्षम हैं ... CPU का 50% कहें। त्रुटि दर 1% से कम थी। –

0

आप लूप के भीतर थ्रेड स्लीप (मिलीसेकंड) को कॉल करके लूप को धीमा कर सकते हैं। वह CPU को शेड्यूलर पर वापस रखता है।

लेकिन 'बहुत अधिक सीपीयू खपत' मुझे लगता है कि आपको और मौलिक समस्याएं हो सकती हैं। क्या यह थ्रेड मतदान और कुछ और इंतज़ार कर रहा है? यदि ऐसा है, तो आपको घटनाओं या कुछ अन्य कर्नेल-आधारित सिग्नलिंग तंत्र के उपयोग पर विचार करना चाहिए।

0

मुझे लगता है कि आपको यह पता लगाने के लिए किसी प्रकार का ओएस एपीआई पूछना होगा कि आप कितने सीपीयू उपभोग कर रहे हैं और उस पर थ्रॉटलिंग फैसले (जैसे थ्रेड स्लीप) लेते हैं।

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