Я делаю форму, которая отображает данные о производительности, и у меня есть несколько счетчиков производительности, которые отображают некоторую информацию о процессоре и памяти. Поскольку первые результаты всегда «0», я делаю поток сна перед назначением следующего значения. Проблема в том, что это действительно делает программу вялой.Лучший способ кодирования PerformanceCounters
Даже перемещение окна происходит медленно, и я уверен, что это связано с событием отключения потока, которое в основном работает каждую секунду. Я установил таймеры всегда с интервалом в 1 секунду, потому что я хочу, чтобы он отображал информацию типа «в реальном времени».
Вот мой код до сих пор:
private PerformanceCounter pcProcess; //Process
private PerformanceCounter pcMemory; //Memory
private void tmrProcess_Tick(System.Object sender, System.EventArgs e)
{
pcProcess = new PerformanceCounter(); //New Performance Counter Object
pcProcess.CategoryName = "Processor"; //Specify Process Counter
pcProcess.CounterName = "Interrupts/sec";
pcProcess.InstanceName = "_Total";
pcProcess.NextValue();
System.Threading.Thread.Sleep(1000);
cpInt.Text = pcProcess.NextValue().ToString(); //Display
pcProcess.CounterName = "% Processor Time";
pcProcess.InstanceName = "_Total";
pcProcess.NextValue();
System.Threading.Thread.Sleep(1000);
cpPower.Text = pcProcess.NextValue().ToString() + "%"; //Display
}
private void tmrMemory_Tick(System.Object sender, System.EventArgs e)
{
pcMemory = new PerformanceCounter();
pcMemory.CategoryName = "Memory";
//This counter gives a general idea of how many times information being requested is not where the application (and VMM) expects it to be
pcMemory.CounterName = "Available MBytes";
avlMem.Text = pcMemory.NextValue().ToString() + " Mb";
pcMemory.CounterName = "Page Faults/sec";
pcMemory.NextValue();
System.Threading.Thread.Sleep(1000);
pgFaults.Text = pcMemory.NextValue().ToString();
}
Должен ли я позвонить PerformanceCounter дважды? Итак, это будет this.pcMemory = новый PerformanceCounter this.pcProcess = new PerformanceCounter(); – user263029
@ user263029 Да, у вас должен быть один экземпляр для каждого счетчика, который вы контролируете – ken2k