SelectQuery съедает 100% CPU - PullRequest
       10

SelectQuery съедает 100% CPU

2 голосов
/ 21 января 2010

Я делаю запрос для всех пользователей на машине, и когда он запускается, он захватывает 100% ЦП и блокирует систему. Я ждал до 5 минут, и ничего не происходит.

В диспетчере задач wmiprvse.exe использует все ресурсы процессора. Когда я убиваю этот процесс, все возвращается в нормальное состояние.

Вот мой код:

        SelectQuery query = new SelectQuery("Win32_UserAccount", 
            "LocalAccount=1 and Domain='" + GetMachine().DomainName + "'");
        using(ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) {
            IList<WindowsUser> users = new List<WindowsUser>();
            Console.WriteLine("Getting users...");
            foreach (ManagementObject envVar in searcher.Get()) {
                Console.WriteLine("Getting " + envVar["Name"].ToString() + "...");
            }
        }

В консоли я вижу только получение пользователей ... и ничего больше. Кажется, проблема в поисковике. Get ().

Кто-нибудь знает, почему этот запрос занимает 100% ЦП? Благодаря.

РЕДАКТИРОВАТЬ: ОК Я обнаружил, что процесс WMI потребляет только 25% ЦП, но он не освобождается, если я завершаю программу (запрос не завершается). В следующий раз, когда я запускаю экземпляр, процесс идет до 50% ЦП и т. Д., И т. Д., Пока он не достигнет 100%.

Итак, мой новый вопрос: почему процессор не освобождается и как долго должен выполняться запрос, подобный этому?

1 Ответ

0 голосов
/ 21 января 2010

Попробуйте это

SelectQuery query = new SelectQuery("Win32_UserAccount",  "LocalAccount=1 and Domain='" + GetMachine().DomainName + "'"); 
using(ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) { 
  IList<WindowsUser> users = new List<WindowsUser>(); 
  Console.WriteLine("Getting users...");
  ManagementObjectCollection myCollection = searcher.Get();
  foreach (ManagementObject envVar in MyCollection){ 
    Console.WriteLine("Getting " + envVar["Name"].ToString() + "..."); 
  } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...