2009-08-20 16 views
8

के लिए सभी प्रदर्शन काउंटर सूचीबद्ध करें क्या किसी दिए गए श्रेणी नाम के लिए सभी तत्काल प्रदर्शन काउंटर पुनर्प्राप्त करने के लिए System.Diagnostics में अंतर्निहित विधि है?किसी श्रेणी

हमारे पास कस्टम प्रदर्शन काउंटर का उपयोग करके कई बहु थ्रेडेड ऐप्स हैं और अब प्रदर्शन आंकड़ों को प्रदर्शित करने के लिए डैशबोर्ड जोड़ने की आवश्यकता है।

मैं डैशबोर्ड को इस तरह से बनाना चाहता हूं कि जब भी कोई कोड के नए टुकड़े में नया काउंटर जोड़ता है तो उसे अद्यतन करने की आवश्यकता नहीं होती है।

उत्तर

25

इस प्रयास करें:

public void ListCounters(string categoryName) 
{ 
    PerformanceCounterCategory category = PerformanceCounterCategory.GetCategories().First(c => c.CategoryName == categoryName); 
    Console.WriteLine("{0} [{1}]", category.CategoryName, category.CategoryType); 

    string[] instanceNames = category.GetInstanceNames(); 

    if (instanceNames.Length > 0) 
    { 
     // MultiInstance categories 
     foreach (string instanceName in instanceNames) 
     { 
      ListInstances(category, instanceName); 
     } 
    } 
    else 
    { 
     // SingleInstance categories 
     ListInstances(category, string.Empty); 
    } 
} 

private static void ListInstances(PerformanceCounterCategory category, string instanceName) 
{ 
    Console.WriteLine(" {0}", instanceName); 
    PerformanceCounter[] counters = category.GetCounters(instanceName); 

    foreach (PerformanceCounter counter in counters) 
    { 
     Console.WriteLine("  {0}", counter.CounterName); 
    } 
} 

आप कई उदाहरण है और कुछ अलग ढंग से उन के साथ सौदा कर सकते हैं कि श्रेणियों के बारे में पता होना चाहिए।

6
बस मस्ती के लिए

.. यहाँ LINQ का 1 पंक्ति में एक ही बात है:

PerformanceCounterCategory 
.GetCategories() 
.Where(cat => cat.CategoryName == "ASP.NET v4.0.30319") 
.Select (cat => cat.GetInstanceNames().Any() ? cat.GetInstanceNames().Select (i => cat.GetCounters(i)).SelectMany (counter => counter) : cat.GetCounters("")).SelectMany (counter => counter) 
.Select(counter => string.Format("{0} : {1}.{2}", counter.InstanceName , counter.CategoryName, counter.CounterName)) 
+0

cat.GetInstanceNames() धीमी है, आपको क्या करना चाहिए एक "चर रहे" सूची प्राप्त करने, और यह पुन: उपयोग बुला बाद में –

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