2016-06-28 6 views
1

При просмотре счетчиков производительности .Net с помощью инструмента Performance можно увидеть счетчики производительности веб-процесса, перечисленные (w3wp, w3wp # 1):Чтение w3wp .Net счетчиков производительности экземпляров программно

Performance Monitor showing w3wp instances

Однако когда Я бегу следующий код в качестве администратора:

var instanceNames = new PerformanceCounterCategory(".NET CLR Memory") 
        .GetInstanceNames() 
        .OrderBy(x => x); 

foreach (var name in instanceNames) 
{ 
    Console.WriteLine(name); 
} 

Это выход я вижу:

Missing w3wp instances

Обратите внимание, что счетчики w3wp не указаны. Кто-нибудь знает, почему это так и как я могу это исправить?

ответ

3

Решение заключалось в том, что вы должны запускать приложение в том же состоянии, что и ваш веб-сайт. Поскольку мой сайт был 64-битным, мне нужно было запустить консольное приложение в режиме 64 бит. Чтобы сделать это, щелкните правой кнопкой мыши на проекте консольного приложения, нажмите свойства на вкладке «Сборка», чтобы снять флажок «Предпочитать 32-разрядный».

Также, когда вы собираете идентификатор процесса для процесса w3wp, используя счетчик идентификаторов процессов в категории памяти .NET CLR, начинать с нуля. Чтобы получить идентификатор процесса, вы должны инициализировать веб-сайт и убедиться, что по крайней мере одна сборка мусора происходит. Поскольку это было в моем тестовом коде, я мог просто вызвать GC.Collect в обработчике Application_Start.