के बारे में भ्रम मैं एक निश्चित विधि के औसत निष्पादन समय को मापने के लिए PerformanceCounter
सेट अप करने का प्रयास कर रहा हूं। मैंने AverageTimer32
पर पढ़ने की कोशिश की है और मैंने कई उदाहरण देखे हैं, लेकिन मुझे लगता है कि यह सही नहीं लगता है।औसत टिमर 32 प्रदर्शन काउंटर
मैं श्रेणियों
CounterCreationDataCollection CCDC = new CounterCreationDataCollection();
// Add the counter.
CounterCreationData averageTimer32 = new CounterCreationData();
averageTimer32.CounterType = PerformanceCounterType.AverageTimer32;
averageTimer32.CounterName = counterName;
CCDC.Add(averageTimer32);
// Add the base counter.
CounterCreationData averageTimer32Base = new CounterCreationData();
averageTimer32Base.CounterType = PerformanceCounterType.AverageBase;
averageTimer32Base.CounterName = baseCounterName;
CCDC.Add(averageTimer32Base);
// Create the category.
PerformanceCounterCategory.Create(categoryName, "Demonstrates usage of the AverageTimer32 performance counter type", PerformanceCounterCategoryType.SingleInstance, CCDC);
की स्थापना की तो मैं काउंटर बनाने
PC = new PerformanceCounter(categoryName, counterName, false);
BPC = new PerformanceCounter(categoryName, baseCounterName, false);
PC.RawValue = 0;
BPC.RawValue = 0;
और अंत में मैं बीता हुआ समय हर बार मेरी विधि
private void TheMethodIWantToMeasure() {
Stopwatch stopwatch = Stopwatch.StartNew();
// Fake work that take ~50ms
Thread.Sleep(50 + random.Next(-10, 10));
stopwatch.Stop();
PC.IncrementBy(stopwatch.ElapsedTicks);
BPC.Increment();
}
की तरह कर कहा जाता है के लिए लॉग इन यह, मैं इस तरह दिखने प्रदर्शन प्रदर्शन मॉनीटर के परिणामस्वरूप समाप्त होता है। मुझे 50 एमएस के आसपास एक संक्रामक वक्र के बजाय स्पाइक्स मिलते हैं:
क्या मैंने AverageTimer32
गलत समझा है? मैंने इसके बारे में पढ़ा है, लेकिन यह थोड़ा उलझन में है। हालांकि, मैंने उदाहरणों को व्यावहारिक रूप से मेरे जैसा ही किया है, इसलिए मुझे लगता है कि इसे काम करना चाहिए। क्या कारण हो सकता है कि मुझे केवल स्पाइक मिलते हैं?
संपादित यह उल्लेख है कि TheMethodIWantToMeasure
केवल हर ~ 5s कहा जाता है के लायक हो सकता है, और मैं बस एहसास हुआ कि मैं कील हर ~ 5 सेकंड मिलता है। लेकिन मुझे समझ में नहीं आता कि AverageTimer32
फॉर्मूला ((एन 1-एन 0)/एफ)/(बी 1-बी 0) का उपयोग करता है तो यह परिणाम कैसे प्रभावित कर सकता है। यह इस बात पर निर्भर नहीं होना चाहिए कि मैं कितनी बार एन और बी के मूल्यों को स्टोर करता हूं?