[英]SelectQuery eating up 100% CPU
我正在对计算机上的所有用户进行查询,当它执行时它会占用100%的CPU并锁定系统。 我已经等了5分钟,什么也没发生。
在任务管理器中,wmiprvse.exe正在使用所有CPU。 当我杀死该进程时,一切恢复正常。
这是我的代码:
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() + "...");
}
}
在控制台中,我看到的只是获取用户...而已。 问题似乎出在searcher.Get()。
有谁知道为什么这个查询占用100%的CPU? 谢谢。
编辑:好的,我发现它的WMI进程仅占用25%的CPU,但是如果我结束程序(查询永远不会结束),它不会被释放。 下次启动实例时,该过程将占用高达50%的CPU等,直到达到100%。
所以我的新问题是,为什么不释放CPU?完成这样的查询需要多长时间?
尝试这个
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() + "...");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.