2009-12-10 8 views
6

कहें कि मेरे पास एक विधि है Foo() और मैं उस समय को मापने के लिए मिली जो कि किस प्रकार के विंडोज प्रदर्शन काउंटर का उपयोग कर रहा है?ऑपरेशन समय को मापने के लिए सबसे उपयुक्त प्रदर्शन काउंटर प्रकार क्या है?

var stopwatch = new Stopwatch(); 
stopwatch.Start(); 
Foo(); 
stopwatch.Stop(); 
counter.RawValue = stopwatch.TotalMilliseonds; 

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

उत्तर

7

यह लिए एक अच्छे उम्मीदवार AverageTimer32 तरह लगता है। अधिक जानकारी के लिए this SO answer देखें।

+0

हालांकि मैं अलग-अलग कॉलों में समय को औसत नहीं देना चाहता हूं। –

+0

आप वास्तव में और अधिक अर्थपूर्ण रूप से नहीं कर सकते हैं, क्योंकि आप समवर्ती अनुरोधों के लिए क्या रिकॉर्ड करेंगे? –

0

मैं सामान्य रूप से स्टॉपवॉच का उपयोग करें, लेकिन मैं यह भी पी का इस्तेमाल किया है/kernel32.dll को आह्वान:

[DllImport("Kernel32.dll")] 
    private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); 

    [DllImport("Kernel32.dll")] 
    private static extern bool QueryPerformanceFrequency(out long lpFrequency); 

मैं) दो तरीकों प्रारंभ() और बंद करो (कहा जाता है:

public void Start() 
    { 
    Thread.Sleep(0); 
    QueryPerformanceCounter(out startTime); 
    } 


    public void Stop() 
    { 
    QueryPerformanceCounter(out stopTime); 
    } 

करने के लिए कॉल के बीच की अवधि को क्वेरी शुरू करने के लिए() और बंद करो():

public double Duration 
    { 
    get 
    { 
     return (double)(stopTime - startTime)*1000/(double)freq; 
    } 
    } 

ध्यान दें कि freq में निर्धारित किया जाता है निर्माता:

public PerformanceTimer() 
    { 
    startTime = 0; 
    stopTime = 0; 

    if (QueryPerformanceFrequency(out freq) == false) 
    { 
     // not supported 
     throw new Win32Exception(); 
    } 
    } 

मेरी जरूरतों के लिए, मैं बहुत अधिक अंतर नहीं दिखाई दी, हालांकि मैं सुझाव है कि आप दोनों क्या आप सूट देखने के लिए प्रयास करें।

संपादित करें: मैं original code from MSDN का पता लगाने में सक्षम था। ऐसा लगता है कि नेट 1.1 के बाद से कुछ सुधार किए गए हैं। ले-होम संदेश यह है कि माइक्रोसॉफ्ट दावों दावा करता है कि यह विधि नैनोसेकंद सटीकता प्रदान करती है।

+0

स्टॉपवॉच क्वेरी क्वेरीफॉर्मेंस काउंटर भी उपयोग करें। लेकिन समय अंतराल को मापने के बारे में सवाल न करें। यह बाद में विश्लेषण के लिए एक मापा मूल्य कैसे बनाए रखने के बारे में है। – user1295211

1

पिछले जवाब देने के लिए जोड़ने के लिए, वहाँ है CodeProject पर दोनों पूर्व निर्मित और कस्टम निर्मित प्रदर्शन काउंटरों पर एक very good article ..

0

एक उत्तर और एक सवाल:

उत्तर: मेरे लिए कम तकनीक काम करता है। आप microseconds चाहते हैं? इसे 10^6 बार लूप करें और अपनी घड़ी का उपयोग करें।

प्रश्न: क्या आप पूछ रहे हैं क्योंकि आप अपना कोड तेज़ी से बनाना चाहते हैं? फिर consider this

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