SelectQuery占用100%的CPU

时间:2010-01-21 15:37:49

标签: c# windows wmi

我正在对机器上的所有用户进行查询,当它执行时,它会抓取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没有被发布以及这样的查询需要多长时间才能完成?

1 个答案:

答案 0 :(得分:0)

试试这个

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() + "..."); 
  } 
}