Я делаю запрос для всех пользователей на машине, и когда он выполняет его, он захватывает 100% процессор и блокирует систему. Я ждал до 5 минут, и ничего не происходит.SelectQuery ест 100% CPU
В диспетчере задач 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() + "...");
}
}
В консоли я вижу это Getting пользователей ... и больше ничего. Проблема связана с поиском.Get().
Кто-нибудь знает, почему этот запрос принимает 100% -ный процессор? Благодарю.
EDIT: OK Я обнаружил, что процесс WMI использует только 25% процессор, но он не освобождается, если я заканчиваю программу (запрос никогда не заканчивается). В следующий раз, когда я начну экземпляр, процесс дойдет до 50% CPU и т. Д. И т. Д., Пока он не достигнет 100%.
Итак, мой новый вопрос - почему процессор не освобождается и как долго должен выполняться такой запрос?
Обычно, если запрос принимает очень много времени, чтобы вернуться, или не возвращаются вовсе, это происходит из-за неправильного условия соединения. Я не очень хорошо знаком с .NET, поэтому я не уверен, как выглядит ваш фактический запрос в SQL. – amischiefr
Ahh, я удалил свои условия и выполнил запрос так, чтобы он был. Если вы опубликуете это как ответ, я могу дать вам кредит. Благодаря! – modernzombie
Ну, это не похоже на большой ответ, поэтому я сделал комментарий. Я не очень беспокоюсь о репутации, просто пытаюсь помочь, но спасибо. – amischiefr