// performanceCounterRequestsTotal
//
this.performanceCounterRequestsTotal.CategoryName =
'Quote Service Counts';
this.performanceCounterRequestsTotal.CounterName =
'# of Requests';
this.performanceCounterRequestsTotal.Readonly = false;
// ...
Счетчики производительности, которые показывают общие значения, увеличиваются в методе Listener()
класса QuoteServer
. Метод Increment()
увеличивает счетчик на 1, метод IncrementBy()
увеличивает счетчик на значение аргумента.
Для счетчиков производительности, которые показывают посекундные значения, в методе Listener()
обновляются только две переменные — requestPerSec
и bytessPerSec
:
void protected void Listener() {
try {
listener = new TCPListener(port);
listener.Start();
while (true) {
Socket socket = listener.Accept();
if (socket == null) {
return;
}
string message = GetRandomQuoteOfTheDay();
UnicodeEncoding encoder = new UnicodeEncoding();
byte [] buffer = encoder.GetBytes(message);
socket.Send(buffer, buffer.Length, 0);
socket.Close();
performanceCounterRequestsTotal.Increment();
performanceCounterBytesSentTotal.IncrementBy(nBytes);
requestsPerSec++;
bytesPerSec += Bytes;
}
} catch (Exception e) {
string message = 'Quote Server failed in Listener: ' + e.Message;
eventLog.WriteEntry(message, EventLogEntryType.Error);
}
}
Чтобы показывать обновленные значения каждую секунду, используется компонент Timer
. Метод OnTimer()
вызывается раз в секунду и задает счетчики производительности с помощью свойства RawValue
класса PerformanceCounter
:
protected void OnTimer(object sender, system.EventArgs e) {
performanceCounterBytesSentPerSec.RawValue = bytesPerSec;
performanceCounterRequestsPerSec.RawValue = reguestsPerSec;
bytesPerSec = 0;
requestsPerSec = 0;
}
perfmon.exe
Теперь можно контролировать нашу службу. Утилита Performance может запускаться из Administrative Tools|Performance. Нажимая кнопку + в панели инструментов, можно добавить счетчики производительности. Quote Service будет определяться как объект производительности. Все сконфигурированные счетчики показаны в списке счетчиков:

После добавления счетчиков можно увидеть счетчики нашей службы в ходе времени. Используя эту утилиту производительности, можно также создать файлы журналов для последующего анализа производительности.

Служба счетчика производительности
Если не существует ссылки на объект счетчика производительности, и объект был удален сборщиком мусора, счетчик этого объекта теряется и запускается в следующий раз с 0. Чтобы решить эту проблему, состояние можно хранить в службе счетчиков производительности. С помощью .NET Framework служба счетчиков производительности устанавливается в системе. Необходимо только запустить службу; можно также сконфигурировать службу для автоматического запуска во время начальной загрузки системы.
Свойства служб Windows 2000
Windows 95, 98 и ME не поддерживают службы Windows. Они поддерживаются в Windows NT, Windows 2000 и Windows ХР. Windows 2000 имеет несколько больше свойств для служб по сравнению с Windows NT. Рассмотрим свойства служб в Windows 2000.
Изменения сетевого соединения и события электропитания
В Windows 2000 не требуется, чтобы система перезагружалась так часто, как это было необходимо в Windows NT; например, не нужно перезагружать систему, когда изменяется адрес IP, — служба получает события при смене адреса и действует соответственно. Windows 2000 посылает следующие управляющие коды службам, когда изменяется сетевое соединение:
Управляющий код | |
---|---|
SERVICE_CONTROL_NETBINDADD | Доступен новый компонент для соединения. |