Счетчики производительности в разработке серверов - PullRequest
3 голосов
/ 01 апреля 2010

Все вы согласны со значением использования счетчиков производительности для серверных приложений.

Я хотел бы знать, как реализовать это с помощью C #.

Обычно счетчики производительности имеют следующие атрибуты:

  1. Они общие / глобальные
  2. Запись требует блокировок для обеспечения синхронизации
  3. Чтение иногда требует блокировки тоже

Лучше ли обновлять их асинхронно? Каков наилучший способ сделать их асинхронными?

Я планирую использовать функцию ThreadPool.QueueUserWorkItem (). Что вы думаете об этом?

Если мои вопросы кажутся немного расплывчатыми, пожалуйста, посмотрите на сервис HelloWorld WCF.

Я также хочу знать следующее:

  1. Сколько раз его били в целом и за определенный период
  2. Среднее / минимальное / максимальное время ответа в целом и в течение определенного периода

Если кто-нибудь знает какие-либо специальные способы сделать это в .NET или WCF, пожалуйста, сообщите мне.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2010

Если вы используете .NET классы для этой цели, вам не нужно вручную блокировать приращение, уменьшение и запрос счетчика производительности - инфраструктура сделает это за вас.

Если вам нужно использовать счетчики производительности в нативном коде, вы все равно должны использовать InterlockedIncrement () и друзей.

Я думаю, что асинхронное обновление счетчиков производительности не очень хорошая идея, но ваш пробег может отличаться. Это может считаться менее полезным, если данные о какой-то интересной ситуации поступают после факта. Во всех случаях я бы не давил на ThreadPool только для обновления счетчика производительности. Теперь, если вам все равно нужно выполнить работу, которая запускает счетчик в потоке, это, конечно, будет что-то другое.

Как правило, я не думаю, что обновление счетчика производительности действительно является узким местом, а скорее сбор данных, которые используются для обновления счетчика.

Например, счетчики производительности .NET GC Memory обновляются только тогда, когда GC действительно происходит, потому что отслеживание информации (в фоновом режиме) просто для обновления счетчиков каждый раз, когда что-то может быть слишком дорогим (извините, здесь нет ссылок, но есть несколько записей в блоге MS на эту тему).

Наконец, имейте в виду, что WCF уже предоставляет довольно большое количество счетчиков из коробки, которое может охватить все, что вы хотите уже сейчас.

1 голос
/ 01 апреля 2010

Вы можете использовать стандартные счетчики производительности Windows.

Эта функция доступна из c # с использованием пространства имен system.diagnostics.performancecounter. Для примера C # см:

http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...