2009-08-22 9 views
6

पर CPU उपयोग बनाएं मैं कुछ CPU उपयोग स्थितियों के तहत कुछ मशीनों पर सिस्टम प्रतिक्रिया आदि का परीक्षण करना चाहता हूं। दुर्भाग्य से मैं केवल ~ 100% उपयोग (अनंत लूप) बना सकता हूं या पर्याप्त CPU उपयोग नहीं कर सकता (मैं सी # का उपयोग कर रहा हूं)।सी #: कस्टम प्रतिशत

क्या कोई तरीका है, किसी न किसी अनुमान में, क्योंकि अन्य कार्य सिस्टम पर भी चल रहे हैं, ताकि 20, 30, 40% (और आगे) चरणों में कृत्रिम रूप से CPU उपयोग को बनाया जा सके?

मैं समझता हूं कि सिस्टम के बीच मतभेद हैं, जाहिर है, क्योंकि सीपीयू के अलग-अलग हैं। यह कस्टमाइज करने योग्य सीपीयू गहन गणनाओं पर एल्गोरिदम/विचारों के बारे में अधिक है जो मौजूदा सीपीयू पर अधिकतम उपयोग किए बिना पर्याप्त उपयोग करते हैं, जिससे मैं उन्हें ट्विक कर सकता हूं, फिर वांछित प्रतिशत बनाने के लिए उन्हें समायोजित करने के लिए।

उत्तर

4

आप एक थ्रेड टाइमर जोड़ सकते हैं जो अंतराल पर उठता है और कुछ काम करता है। फिर अंतराल और काम की मात्रा को तब तक ट्विक करें जब तक कि आप इच्छित भार का अनुमान लगाएं।

private void button1_Click(object sender, EventArgs e) 
    { 
     m_timer = new Timer(DoWork); 
     m_timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(10)); 
    } 

    private static void DoWork(object state) 
    { 
     long j = 0; 
     for (int i = 0; i < 2000000; i++) 
     { 
      j += 1; 
     } 
     Console.WriteLine(j); 
    } 

alt text http://i32.tinypic.com/15f4tp5.png

कि और के साथ

पाश मैं अपने सिस्टम के लिए 20%, 60% और पूरा भार जोड़ने के लिए सक्षम था के मूल्य में सुधार करने। यह अधिक धागे के लिए अतिरिक्त धागे का उपयोग करके एकाधिक कोर के लिए स्केल करेगा।

0

ऐसा नहीं किया - लेकिन आप कई कार्यक्रमों में चल रहे प्राथमिकता वाले धागे को काम करने का प्रयास कर सकते हैं।

0

जब आपने नींद का उपयोग करने की कोशिश की, तो क्या आपने ऐसा किया या नींद को वास्तविक पाश के अंदर रखा? मुझे लगता है कि यह काम करेगा।

while(true) 
{ 
    Thread.Sleep(0); 
    for(int i=0;i<veryLargeNumber; i++) 
    { 
     //maybe add more loops here if looping to veryLargeNumber goes to quickly 
     //also maybe add some dummy operation so the compiler doesn't optimize the loop away 
    } 
} 
4

तब यह?

DateTime lastSleep = DateTime.Now;    
    while (true) 
    { 
     TimeSpan span = DateTime.Now - lastSleep; 
     if (span.TotalMilliseconds > 700) 
     { 
      Thread.Sleep(300); 
      lastSleep = DateTime.Now; 
     } 
    } 

आप अधिक स्थिर लोड प्राप्त करने के लिए छोटी संख्या का उपयोग कर सकते हैं .... जब तक अनुपात आप चाहते हैं। यह केवल एक कोर का उपयोग करता है, इसलिए आपको इसे कई धागे में करना पड़ सकता है।

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