すべてのネットワーク インターフェイスを通過する帯域幅を監視するために、このクラスを作成しています。このすべてがうまく機能しますが、クエリ中の CPU 使用率を減らしたいと思います。その理由は、これを数秒ごとに実行すると、毎回プロセスの CPU 使用率が約 7 ~ 8% 増加するためです。CPUサイクルの量を減らす方法はありますか?
PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
String[] instancename = category.GetInstanceNames();
foreach (string name in instancename)
{
String networkCard = name;
const int numberOfIterations = 10;
PerformanceCounter bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", networkCard);
float bandwidth = bandwidthCounter.NextValue();
PerformanceCounter dataSentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", networkCard);
PerformanceCounter dataReceivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", networkCard);
float sendSum = 0;
float receiveSum = 0;
for (int index = 0; index < numberOfIterations; index++)
{
sendSum += dataSentCounter.NextValue();
receiveSum += dataReceivedCounter.NextValue();
}
float dataSent = sendSum;
float dataReceived = receiveSum;
double dout = (((8 * (dataSent)) / (bandwidth * numberOfIterations) * 100) * 1024) / 100;
double din = (((8 * (dataReceived)) / (bandwidth * numberOfIterations) * 100) * 1024) / 100;
dout = Math.Round(dout, 2);
din = Math.Round(din, 2);
string doutround = Convert.ToString(dout);
string dinround = Convert.ToString(din);
String output = dinround + "/" + doutround;
GlobalsWMI.NetIOs.Add(output);
}
String tooutput = String.Join("AND", GlobalsWMI.NetIOs);
GlobalsWMI.NetIOs.Clear();
return tooutput;