2012-07-17 16 views
7

में नहीं देख सकता हूं मेरे पास कोड का यह टुकड़ा है: जहां मैं अपना प्रदर्शन काउंटर बनाता हूं। यह ठीक निष्पादित करता है, यदि मौजूद नहीं है तो यह प्रदर्शन काउंटर भी बनाता है, लेकिन जब मैं पेर्फॉन का उपयोग करता हूं, तो मुझे यह प्रदर्शन काउंटर नहीं मिल रहा है।मेरा प्रदर्शन काउंटर कहां है? यह बनाया गया है लेकिन मैं इसे perfmon

क्या हो रहा है?

const string _categoryName = "MyPerformanceCounter"; 
    if (!PerformanceCounterCategory.Exists(_categoryName)) 
    { 
     CounterCreationDataCollection counters = new CounterCreationDataCollection(); 

     CounterCreationData ccdWorkingThreads = new CounterCreationData(); 
     ccdWorkingThreads.CounterName = "# working threads"; 
     ccdWorkingThreads.CounterHelp = "Total number of operations executed"; 
     ccdWorkingThreads.CounterType = PerformanceCounterType.NumberOfItems32; 
     counters.Add(ccdWorkingThreads); 

     // create new category with the counters above 
     PerformanceCounterCategory.Create(_categoryName, 
       "Performance counters of my app", 
       PerformanceCounterCategoryType.SingleInstance, 
       counters); 
    } 
+2

अतीत में पेर्फ काउंटर के साथ एक मुद्दा मैंने चलाया है कि चल रही प्रक्रिया को व्यवस्थापक होना चाहिए, या पासफ काउंटर बनाने के लिए कुछ अनुमतियां होनी चाहिए। यही कारण है कि आम तौर पर रन-टाइम के बजाय इंस्टॉल-टाइम पर नए पेर्फ काउंटर बनाए जाते हैं। मुझे याद नहीं है कि क्या होता है यदि आपके ऐप में व्यवस्थापक अधिकार नहीं हैं; यह काउंटर बनाने के लिए चुपचाप असफल हो सकता है। हालांकि मुझे लगता है कि यह एक अपवाद फेंक देगा ... लेकिन वैसे भी, अगर आप पहले से नहीं हैं, तो अपने ऐप को व्यवस्थापक के रूप में चलाने का प्रयास करें। – CodingWithSpike

+3

इसके अलावा, यदि आप परफॉर्म चलते समय काउंटर बनाते हैं, तो आपको नए काउंटर को पहचानने के लिए परफॉर्म को पुनरारंभ करना होगा। –

+0

प्लस, काउंटर तुरंत दिखाई नहीं दे रहे हैं। कभी-कभी उन्हें देखने में सक्षम होने में सेकंड लगते हैं। –

उत्तर

2

कोई अपवाद प्राप्त करने का कारण यह है कि प्रयास-पकड़ ब्लॉक गुम है। आप इस

 try 
     {     
      const string _categoryName = "MyPerformanceCounter"; 
      if (!PerformanceCounterCategory.Exists(_categoryName)) 
      { 
       CounterCreationDataCollection counters = 
       new CounterCreationDataCollection(); 

       CounterCreationData ccdWorkingThreads = new CounterCreationData(); 
       ccdWorkingThreads.CounterName = "# working threads"; 
       ccdWorkingThreads.CounterHelp = "Total number of operations executed"; 
       ccdWorkingThreads.CounterType = PerformanceCounterType.NumberOfItems32; 
       counters.Add(ccdWorkingThreads); 

       // create new category with the counters above 
       PerformanceCounterCategory.Create(_categoryName, 
         "Performance counters of my app", 
         PerformanceCounterCategoryType.SingleInstance, 
         counters); 
      }     
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); //Do necessary action 
     } 

तरह ट्राई एवं कैच ब्लॉक में अपने बयान जोड़ते हैं तो यह exceptions.If कब्जा आप की तरह अपवाद देख "का अनुरोध किया रजिस्ट्री पहुँच अनुमति नहीं है।" तो आपको सामान करने के लिए प्रशासनिक अधिकारों की आवश्यकता होती है। इसकी पुष्टि करने के लिए व्यवस्थापकीय अधिकारों के साथ विजुअल स्टूडियो चलाएं और कोड निष्पादित करें।

1

विज़ुअल स्टूडियो को श्रेणियों के निर्माण की अनुमति देने के लिए प्रशासक के रूप में चलाने के अलावा, मेरे पास एक ही समस्या थी - .NET कोड ने बताया कि काउंटर वहां थे, लेकिन परफॉर्म में ऐसी कोई काउंटर श्रेणियां दिखाई नहीं दे रही थीं।

जाहिर है परफॉर्म कभी-कभी disable performance counters by flagging it as disabled in the registry होगा।

यदि आप check in the registryHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services के तहत आपको अपना प्रदर्शन काउंटर श्रेणी ढूंढने में सक्षम होना चाहिए (बस अपनी श्रेणी का नाम "फ़ोल्डर" में से एक के रूप में देखें)। उपकुंजी ("फ़ोल्डर") के तहत Performance रजिस्ट्री मान Disable Performance Counters ढूंढें और इसे शून्य पर सेट करें। परफॉर्म को पुनरारंभ करें और अब आपको अपनी श्रेणियों और काउंटरों को परफॉर्म में देखना चाहिए।

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