我是一名有用的助手,以下是您需要翻译的内容:
我正在开发一个充电平衡系统,因此我需要知道每台机器的电荷。 PerformanceCounter 似乎是不错的选择,但创建第一个计数器需要花费38到60秒。然而,每个后续的新计数器或“NextValue”调用几乎是即时的。
这是我正在使用的代码:
[TestClass]
public class PerfMon
{
[TestMethod]
public void SimpleCreationTest()
{
Stopwatch Time = new Stopwatch();
Time.Start();
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds);
// Create
PerformanceCounter RAM = new PerformanceCounter("Memory", "Available MBytes");
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => RAM created");
PerformanceCounter CPU = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => CPU created");
PerformanceCounter GC = new PerformanceCounter(".NET CLR Memory", "% Time in GC", "_Global_");
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => GC created");
// Read
float Value = RAM.NextValue();
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => RAM value is : " + Value);
Value = CPU.NextValue();
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => CPU value is : " + Value);
Value = GC.NextValue();
Debug.WriteLine("Time is : " + Time.ElapsedMilliseconds + " => GC value is : " + Value);
}
}
研究
创建新的System.Diagnostics.PerformanceCounter非常慢
我尝试使用其他构造函数并提供精确的"MachineName",但它并没有改变任何东西。
http://craigandera.blogspot.fr/2005/06/performancecounter-constructor-horribly_21.html
根据这两个线程,问题似乎与性能计数器是共享资源有关。然而,我不知道如何解决这个问题。
以管理员身份运行Visual Studio会将第一个创建加速从38秒缩短到26秒,因此也无法解决问题。
谢谢你的帮助。