Входная строка счетчика производительности имела неверный формат C#

Вот мой код

float cpuLoad = 0;

try{
    MessageBox.Show("Running");

    //CPU Load
    PerformanceCounter cpuCounter = new PerformanceCounter();
    cpuCounter.CategoryName = "Processor";
    cpuCounter.CounterName = "% Processor Time";
    cpuCounter.InstanceName = "_Total";

    MessageBox.Show("Performance Counter Created");

    cpuLoad = cpuCounter.NextValue();
    System.Threading.Thread.Sleep(1000);
    cpuLoad = cpuCounter.NextValue();

    MessageBox.Show("Clock Speed Gathered");

    //Remaining Code
}
catch(Exception ex) { MessageBox.Show(ex.Message); }

Я пытаюсь обойти это, и вот исключение, которое он выдает Input string was not in a correct format.

Он печатает первые два окна сообщений, а затем выдает исключение.

Теперь вот что я не могу понять, это работает на Windows 7 Ultimate и Windows Server 2003, но на моих коллегах Windows 7 Ultimate это не работает. Раньше он работал на его компьютере, но вдруг просто остановился. Единственная разница в ближайшей истории заключалась в том, что он изменил свою Сеть.

Изменить

Framework 4 был обновлен сегодня утром. Но у меня это тоже есть на моей машине, поэтому, если это была проблема с фреймворком, почему это не происходит на моем

Любые идеи вызывают у меня потерю

Проверено на его машине

Неисправность с первого раза cpuLoad = cpuCounter.NextValue()

Трассировка стека

System.FormatException was unhandled
  Message="Input string was not in a correct format."
  Source="mscorlib"
  StackTrace:
       at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
       at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
       at System.Diagnostics.PerformanceCounterLib.GetStringTable(Boolean isHelp)
       at System.Diagnostics.PerformanceCounterLib.get_NameTable()
       at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
       at System.Diagnostics.PerformanceCounterLib.CounterExists(String category, String counter, Boolean& categoryExists)
       at System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)
       at System.Diagnostics.PerformanceCounter.Initialize()
       at System.Diagnostics.PerformanceCounter.NextSample()
       at System.Diagnostics.PerformanceCounter.NextValue()
       at CounterTest.Form1..ctor() in C:\Users\x\Documents\x\Applications & Software Development\C# Projects\CounterTest\CounterTest\Form1.cs:line 35
       at CounterTest.Program.Main() in C:\Users\x\Documents\x\Applications & Software Development\C# Projects\CounterTest\CounterTest\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

person Angel.King.47    schedule 25.06.2010    source источник
comment
О, приложение компилируется в режиме отладки, если это имеет значение.   -  person Angel.King.47    schedule 26.06.2010
comment
Не могли бы вы опубликовать трассировку стека, пожалуйста?   -  person David Neale    schedule 26.06.2010
comment
Итак, какой именно вызов вызывает исключение?   -  person Der Hochstapler    schedule 26.06.2010
comment
Пока нет, компилятор находится на моей машине, и я удаленно подключаюсь к его машине. Извините, я немного не знаком с трассировкой стека   -  person Angel.King.47    schedule 26.06.2010
comment
gencha - Я предполагаю, что проблема cpuCounter.NextValue();, но она работает на любой другой машине, которую я тестировал.   -  person Angel.King.47    schedule 26.06.2010


Ответы (2)


Я думаю, вы можете обнаружить, что проблема заключается в неправильной работе счетчиков производительности. Если вы открываете perfmon (Пуск>Выполнить>Perfmon) и видите такую ​​ошибку.

---------------------------
Performance Monitor Control
---------------------------
Unable to add these counters:

\Memory\Available MBytes
\Memory\% Committed Bytes In Use
\Memory\Cache Faults/sec
\Memory\Cache Faults/sec
\PhysicalDisk(*)\% Idle Time
\PhysicalDisk(*)\Avg. Disk Queue Length
\Network Interface(*)\Bytes Total/sec

Затем вам нужно будет перестроить счетчики из PerfStringBackup.ini в папке Windows\System32. Следуйте этому здесь для получения дополнительной информации: формат/" rel="noreferrer">http://drayblog.gotdns.com/index.php/2010/02/04/diagnostics-performancecounter-input-string-was-not-in-a-correct-format/< /а>.

person aHunter    schedule 26.06.2010
comment
Потрясающий. У меня была эта проблема в совершенно не связанной коммерческой программе, у которой нет документации и поддержки (ни исходного кода), и я мог бы исправить ее с помощью вашего поста. - person pertz; 17.02.2013
comment
Эта ссылка больше не работает, поэтому я рекомендую использовать эту ссылку: on-windows-vistaserver20087server2008r2/" rel="nofollow noreferrer">blogs.technet.microsoft.com/yongrhee/2009/10/06/ - person Minamoto; 21.03.2016
comment
Но эта рекомендация мне не помогла, я нашел другой вариант: просто запустил команду lodctr /r и все заработало. - person Minamoto; 21.03.2016

Есть ли шанс, что язык (разговорный/письменный) на компьютере вашего коллеги установлен не так, как ваш, или что они возились с какими-либо настройками локализации на этом компьютере? Это часто является источником незаметных ошибок в программах .NET, особенно при преобразовании строки в/из разных форматов...

person anonymous coward    schedule 25.06.2010
comment
Хайли непохоже. Но даже если так и было. Почему бы а. Версия, которую я скомпилировал на своем компьютере, выйдет из строя, когда я скопирую двоичный файл? - person Angel.King.47; 26.06.2010