我正在研究电荷平衡系统,因此我需要知道每台机器的电荷。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);
}
}
研究
PerformanceCounter 在连接远程服务器时非常慢
创建一个新的 System.Diagnostics.PerformanceCounter 非常慢
我尝试使用其他构造函数并给出精确的“MachineName”,但它并没有改变任何东西。
http://craigandera.blogspot.fr/2005/06/performancecounter-constructor-horribly_21.html
根据这两个线程,问题似乎与性能计数器是共享资源有关。但是我不明白我该如何解决。
在管理员中运行 Visual Studio 将第一次创建从 38 秒“加速”到 26 秒,因此它也不能解决问题。
谢谢你的帮助。