Подтвердить что ты не робот

PerformanceCounters на .NET 4.0 и Windows 7

У меня есть программа, которая отлично работает на VS2008 и Vista, но я пытаюсь использовать ее в Windows 7 и VS2010/.NET Framework 4.0, и она не работает. В конечном счете проблема заключается в том, что System.Diagnostics.PerformanceCounterCategory.GetCategories() (и другие методы PerformanceCounterCategory) не работает. Я получаю сообщение System.InvalidOperationException с сообщением "Не могу загрузить данные счетчика имени, потому что недопустимый индекс" "был прочитан из реестра".

Я могу воспроизвести это с помощью очень простой программы, показанной ниже:

class Program
{
    static void Main(string[] args)
    {
        foreach (var pc in System.Diagnostics.PerformanceCounterCategory.GetCategories())
        {
            Console.WriteLine(pc.CategoryName);
        }
    }
}

Я уверен, что запускаю программу как администратор. Не имеет значения, запускаю ли я его с помощью VS/Debugger или нет. У меня нет другой машины с Windows 7 или VS2010, чтобы проверить ее, поэтому я не уверен, что усложняет ситуацию здесь (или и то?). Это Windows 7 x64, и я попытался заставить приложение работать как на x32, так и на x64, но получить те же результаты.

4b9b3361

Ответ 1

Кажется, счетчики производительности были повреждены в моей системе. Хотя я не следил за этот пост, это привело меня к решению. Вот что я сделал:

В командной строке с правами администратора/подписи введите следующее:

lodctr /?

Полезный материал там...

Затем напечатано:

lodctr /R

В соответствии с документами с предыдущего шага, это получает окна, чтобы перестроить первичную строку реестра и информацию с нуля на основе текущих параметров реестра и резервных файлов INI. У меня такое чувство, что это волшебство. Однако в следующий раз я заметил, что счетчики производительности .NET не были там больше, поэтому на основе this Я набрал следующее, чтобы перезагрузить их:

lodctr "C:\Windows\Microsoft.NET\Framework64\v4.0.20506\corperfmonsymbols.ini"

Обратите внимание, что этот путь для .NET Framework 4.0 на x64. Вы можете представить себе путь для других вариантов рамки/платформы. Я предполагаю, что вы всегда должны загружать счетчики с самой высокой версии .NET Framework, которую вы установили, но это всего лишь предположение.

Я надеюсь, что это когда-нибудь поможет кому-то еще!