Я пытаюсь создать набор пользовательских счетчиков производительности, которые будут использоваться моим приложением 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, потому что он был открыт до создания счетчиков.