2009-10-08 10 views
33

मेरे पास एक प्रोग्राम है जो VS2008 और Vista पर ठीक काम करता है, लेकिन मैं इसे विंडोज 7 और वीएस -2010/.NET Framework 4.0 पर कोशिश कर रहा हूं और यह काम नहीं कर रहा है। आखिरकार समस्या यह है कि System.Diagnostics.PerformanceCounterCategory.GetCategories() (और अन्य प्रदर्शन काउंटर श्रेणी विधियां) काम नहीं कर रही हैं। मुझे एक सिस्टम मिल रहा है। संदेश के साथ अविश्वसनीय अपवाद अपवाद "काउंटर नाम डेटा लोड नहीं कर सकता क्योंकि रजिस्ट्री से एक अवैध अनुक्रमणिका" पढ़ी गई थी। ".NET 4.0 और विंडोज 7 पर प्रदर्शन काउंटर

मैं बहुत ही सरल नीचे दिखाया गया है कार्यक्रम के साथ इस पुन: पेश कर सकते हैं:

class Program 
{ 
    static void Main(string[] args) 
    { 
     foreach (var pc in System.Diagnostics.PerformanceCounterCategory.GetCategories()) 
     { 
      Console.WriteLine(pc.CategoryName); 
     } 
    } 
} 

मुझे यकीन है कि मैं एक व्यवस्थापक के रूप कार्यक्रम चल रहा हूँ बनाना था। इससे कोई फर्क नहीं पड़ता कि मैं इसे वीएस/डीबगर संलग्न करता हूं या नहीं। मेरे पास इसका परीक्षण करने के लिए विंडोज 7 या वीएस -2010 के साथ एक और मशीन नहीं है, इसलिए मुझे यकीन नहीं है कि यहां चीजें जटिल हैं (या दोनों?)। यह विंडोज 7 एक्स 64 है और मैंने ऐप को x32 और x64 दोनों में चलाने की कोशिश की है, लेकिन एक ही परिणाम प्राप्त करें।

+1

यदि आप इसके बारे में विंडोज बनाम नेट संस्करण के बारे में निश्चित नहीं हैं, तो आप .NET 3.5 को पुनर्निर्माण करने के लिए प्रोजेक्ट गुणों को बदलने की कोशिश कर सकते हैं। पुनर्निर्माण, और पुनः प्रयास करें। या आप 2008 के साथ विस्टा/एक्सपी मशीन पर एक ही कोड बना सकते हैं, और EX7 को Win7 मशीन पर कॉपी कर सकते हैं। – JMarsch

+0

ग्रेट टिप। धन्यवाद। –

उत्तर

87

ऐसा लगता है कि प्रदर्शन प्रणाली मेरे सिस्टम पर दूषित हो गई थी। हालांकि मैंने this post का पालन नहीं किया, लेकिन यह मुझे समाधान के लिए प्रेरित किया। यहाँ मैं क्या किया है: वहाँ में

lodctr /? 

उपयोगी सामान ...

तो आपके द्वारा लिखे गए:

lodctr /R 

व्यवस्थापक के साथ एक कमांड प्रॉम्प्ट में/तरक्की विशेषाधिकार निम्नलिखित टाइप किया

पूर्व चरण से दस्तावेज़ों के मुताबिक, यह पर विंडोज़ को perf रजिस्ट्री स्ट्रिंग्स और मौजूदा रजिस्ट्री सेटिंग्स और बी के आधार पर स्क्रैच से जानकारी पुनर्निर्माण करता है एकेपी आईएनआई फाइलें। मुझे एहसास है कि यह जादू क्या है।

lodctr "C:\Windows\Microsoft.NET\Framework64\v4.0.20506\corperfmonsymbols.ini" 

ध्यान दें कि यह मार्ग 64 पर .NET फ्रेमवर्क 4.0 के लिए है: बहरहाल, अगले मैं नेट प्रदर्शन काउंटरों वहाँ अब तो this पर आधारित नहीं थे देखा मैं उन्हें फिर से लोड करने के लिए निम्न टाइप किया है। आप ढांचे/मंच के अन्य बदलावों के लिए पथ की कल्पना कर सकते हैं। मैं अनुमान लगा रहा हूं आपको हमेशा स्थापित किए गए .NET ढांचे के उच्चतम संस्करण से काउंटर लोड करना चाहिए, लेकिन यह केवल एक अनुमान है।

मुझे उम्मीद है कि यह किसी और की मदद करेगा!

+2

सकल! लेकिन हमें बताने के लिए धन्यवाद :-) – KiNgMaR

+1

आपकी आशा पूरी हो गई है। ;) इसके लिए धन्यवाद!!! – valveLondon

+1

क्या कोई विचार है कि यह क्या होता है? – JeremyK

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