Performance Counter Input string was not in a correct format C#
Here is my code
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); }
I have a try and catch around it and here is the exception it throws Input string was not in a correct format
.
It gets through printing the first two Message Boxes, And then throws the exception.
Now here is what I cant get my head around, It works on Windows 7 Ultimate and Windows Server 2003, but on my colleagues Windows 7 Ultimate it Fails. It use to work on his computer, but suddenly its just stopped. The only difference in the near history has been that he has changed his Network.
Edit
Framework 4 was updated this morning. But I have it on my machine as well, so if it was the framework issue why is it not occurring on mine
Any ideas cause im lost
Tested on his machine
Its failing at the first cpuLoad = cpuCounter.NextValue()
Stack Trace
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 in开发者_Python百科fo, 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:
I think you may find that this is an issue with the performance counters not working correctly. If you open perfmon (Start>Run>Perfmon) and see an error like this.
---------------------------
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
Then you will need to rebuild the counters from the PerfStringBackup.ini in the Windows\System32 folder. Follow this here for more info: http://drayblog.gotdns.com/index.php/2010/02/04/diagnostics-performancecounter-input-string-was-not-in-a-correct-format/.
Any chance the (spoken/written) language on your co-worker's machine is set differently than yours, or that they fiddled with any of the localization settings on that machine? This is often a source of subtle bugs in .NET programs, especially when converting a string to/from different formats...
精彩评论