ASP.NET/C# - пользовательские PerformanceCounters отображаются только в 32-битном perfmon в 64-битной системе - PullRequest
1 голос
/ 02 января 2009

Я пытаюсь создать набор пользовательских счетчиков производительности, которые будут использоваться моим приложением ASP.NET. Я использую следующий код для увеличения счетчиков:

internal static void Increment(String instanceName, DistributedCacheCounterInstanceType counterInstanceType)
{
    var permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Write, Environment.MachineName, "CounterName");
    permission.Assert();

    var counter = new PerformanceCounter("CategoryName", "CounterName", instanceName, false);
    counter.RawValue++; // Use RawValue++ instead of Increment() to avoid locking
    counter.Close();
}

Это прекрасно работает в модульных тестах, а также в Cassini на моем компьютере разработчика (Vista Business x64). Я могу наблюдать за счетчиками, работающими в Performance Monitor. Однако счетчики, похоже, не регистрируют никакого увеличения в моей производственной среде (Win Server 2003 x64). Сами экземпляры счетчика доступны, но все они просто показывают «-» для последнего / среднего / минимального / максимального отображения.

Есть идеи, что я могу делать не так?

РЕДАКТИРОВАТЬ: Вот [возможно, несколько устарела] статья MSDN, которую я использовал для справки

РЕДАКТИРОВАТЬ 2: Я использую VS 2008 / .NET Framework v3.5 SP1, если это имеет какое-то значение.

РЕДАКТИРОВАТЬ 3: Только что нашел Эта статья о несоответствии 32-битных / 64-битных приложений и мониторов , но я не уверен, как это применимо к моей ситуации, если вообще. Cassini действительно 32-битное приложение, но у меня не было проблем с просмотром значений в моей 64-битной системе. На моем рабочем сервере и приложение, и система являются 64-разрядными, но я не вижу значений.

РЕДАКТИРОВАТЬ 4: Значения равны , которые отображаются при запуске 32-битного perfmon на рабочем сервере. Итак, я полагаю, что теперь вопрос заключается в том, почему я не могу прочитать значения в 64-битном perfmon?

РЕДАКТИРОВАТЬ 5: Это действительно работает, просто мне пришлось перезапустить мой экземпляр perfmon, потому что он был открыт до создания счетчиков.

1 Ответ

1 голос
/ 12 января 2009

Я читал, что создание PerformanceCounter довольно ресурсоемко. Задумывались ли вы о кешировании их в переменную Session / Application?

Кроме того, разумно ли обновлять счетчик без блокировки в многопоточном приложении ASP.net?

Patrick

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