2012-06-10 18 views
5

हमारे व्यापार मॉडल को सीपीयू घंटे/उपयोग के आधार पर उपयोगकर्ताओं को चार्ज करने की आवश्यकता है।सीपीयू उपयोग की गणना

प्रारंभ में मैं बस StopWatch का उपयोग करने के बारे में सोच रहा था और फिर माप की इकाई के रूप में विलुप्त समय का उपयोग करता था।

लेकिन इस दृष्टिकोण के साथ मुझे जो समस्या दिखाई देती है वह यह है कि उस समय में जब 5000 उपयोगकर्ता सर्वर पर हमला कर रहे हैं, तो कोड के उसी टुकड़े के लिए समय समाप्त हो जाएगा, जब केवल 50 उपयोगकर्ता ही मार रहे हों सर्वर।

अन्य विकल्प उपयोगकर्ताओं को पास किए गए डेटा उपयोगकर्ताओं पर किए गए पुनरावृत्तियों के आधार पर चार्ज करना है। इस दृष्टिकोण के साथ कुछ मुद्दे भी हैं।

  • कुछ कार्यों को डेटा पर किसी भी पुनरावृत्ति की आवश्यकता नहीं होगी।
  • x + y के लिए CPU उपयोग x + y * z से कम है।

सी #/नेट में सीपीयू उपयोग की जानकारी की गणना करने का एक अच्छा तरीका क्या है ताकि यह सर्वर के लोड के बावजूद एक ही ऑपरेशन के लिए सभी उपयोगकर्ताओं के लिए समान रहे?

संभावित रूप से, वास्तविक असेंबली स्तर के निर्देशों की कुल राशि? क्या सी # में उस जानकारी को पाने का कोई तरीका है?

अन्य अन्य संपर्क, क्या आप साझा कर सकते हैं?

इस पर ध्यान देने के लिए बहुत बहुत धन्यवाद।

उत्तर

14

जो भी उपयोगकर्ता अपने अलग process में चलाना चाहते हैं निष्पादित करें और प्रक्रिया के बाद CPU time देखें। यह वॉलक्लॉक समय से भी अलग है क्योंकि यह केवल उस समय ध्यान में रखता है जब प्रक्रिया वास्तव में सीपीयू पर चलती थी।

जो लोग प्रलेखन पढ़ने के लिए तैयार नहीं हैं के लिए कम से कम उदाहरण:

ProcessStartInfo psi = new ProcessStartInfo(@"C:\Blah\Foo.exe"); 
Process p = Process.Start(psi); 
p.WaitForExit(); 
TimeSpan time = p.TotalProcessorTime; 
p.Close(); 

आप हालांकि एसिंक्रोनस रूप से इस चलाने के लिए, कर सकते हैं।

अनुमान, अनुमान लगाने या काले जादू की कोई आवश्यकता नहीं है। आप वैसे भी भरोसेमंद गणना नहीं कर सकते हैं।

+2

क्या आप अलग प्रक्रिया में कोड निष्पादित करने और उसके CPU समय प्राप्त करने के कुछ उदाहरण साझा कर सकते हैं? – Moon

+0

"उन लोगों के लिए +1 जो दस्तावेज़ीकरण पढ़ने के इच्छुक नहीं हैं" (साथ ही सही उत्तर देने के लिए :-)) – phoog

+0

बीटीडब्लू, क्या होगा यदि मैं केवल एक समारोह के उपयोग को ट्रैक करना चाहता हूं? मैं उस कोड को exe के अंदर लपेट सकता हूं। लेकिन क्या कोई बेहतर तरीका है? यदि फ़ंक्शन पृष्ठभूमि थ्रेड में कुछ अन्य कार्य निष्पादित करता है, तो क्या वे एक ही प्रक्रिया का हिस्सा होंगे और 'TotalProcessTime' को प्रभावित करेंगे? – Moon

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