просто попасть в C# программирование поэтому, пожалуйста, голые со мной :)C# Уменьшение CPU Usage - Network Bandwidth Script
Я пишу этот класс, чтобы контролировать пропускную способность, проходящей через все сетевые интерфейсы. Хотя все это прекрасно работает, я хочу попытаться уменьшить использование ЦП во время запроса. Причина в том, что я запускаю это каждые пару секунд, и это добавляет примерно 7-8% больше использования ЦП в процесс каждый раз. Есть ли способ уменьшить количество циклов процессора?
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;
Спасибо,
Как вы управляете этим? Запуск нового процесса относительно дорого, поэтому, если вы можете запустить его один раз и периодически запускать его, это может * уменьшить всплеск. Кроме того, какие цифры вы говорите с помощью instanceNames и numberOfIterations? – LoztInSpace
Я пропустил профайлер и вижу пару вещей: сначала PerformanceCounter.NextValue() на моей машине использует процессор на 6-10%, я не знаю, почему, но он просто делает. Также я заметил, что создание имен экземпляров происходит медленно (category.GetInstanceNames()). Интересно, есть ли другой способ сделать это. – TheKingDave
Вы посмотрели мой ответ (я отчаянно нуждаюсь в репутации). – TheKingDave