C# 选择Query消耗100%的CPU

C# 选择Query消耗100%的CPU,c#,windows,wmi,C#,Windows,Wmi,我正在为机器上的所有用户执行一个查询,当它执行时,它会占用100%的CPU并锁定系统。我已经等了5分钟,什么也没发生 在任务管理器中,wmiprvse.exe正在使用所有CPU。当我停止这个过程时,一切都会恢复正常 这是我的密码: SelectQuery query = new SelectQuery("Win32_UserAccount", "LocalAccount=1 and Domain='" + GetMachine().DomainName

我正在为机器上的所有用户执行一个查询,当它执行时,它会占用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() + "...");
            }
        }
SelectQuery query=new SelectQuery(“Win32\u用户帐户”,
“LocalAccount=1和Domain='”+GetMachine().DomainName+“'”;
使用(ManagementObjectSearcher search=新的ManagementObjectSearcher(查询)){
IList users=新列表();
Console.WriteLine(“获取用户…”);
foreach(searcher.Get()中的ManagementObject envVar){
WriteLine(“get”+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() + "..."); 
  } 
} 
SelectQuery query=new SelectQuery(“Win32_UserAccount”,“LocalAccount=1,Domain='”+GetMachine().DomainName+”);
使用(ManagementObjectSearcher search=新的ManagementObjectSearcher(查询)){
IList users=新列表();
Console.WriteLine(“获取用户…”);
ManagementObjectCollection myCollection=searcher.Get();
foreach(MyCollection中的ManagementObject envVar){
WriteLine(“get”+envVar[“Name”].ToString()+”);
} 
} 
试试这个

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() + "..."); 
  } 
} 
SelectQuery query=new SelectQuery(“Win32_UserAccount”,“LocalAccount=1,Domain='”+GetMachine().DomainName+”);
使用(ManagementObjectSearcher search=新的ManagementObjectSearcher(查询)){
IList users=新列表();
Console.WriteLine(“获取用户…”);
ManagementObjectCollection myCollection=searcher.Get();
foreach(MyCollection中的ManagementObject envVar){
WriteLine(“get”+envVar[“Name”].ToString()+”);
} 
} 

通常,如果查询需要很长时间才能返回,或者根本不返回,那是因为连接条件不正确。我对.NET不是很在行,所以我不确定您在SQL中的实际查询是什么样子。啊,我删除了我的条件并执行了查询,所以一定是这样。如果你把这个作为一个答案,我可以给你的信用。谢谢嗯,这似乎不是一个很好的答案,所以我做了一个评论。我不是真的担心信誉点,只是想帮你,但谢谢你。原来从我的GetMachine方法返回的域类似于server.Domain.com,但我想windows需要类似服务器的soemthing。原来这只是一个愚蠢的问题,但感谢您的帮助。通常,如果查询需要很长时间才能返回,或者根本没有返回,那是因为连接条件不正确。我对.NET不是很在行,所以我不确定您在SQL中的实际查询是什么样子。啊,我删除了我的条件并执行了查询,所以一定是这样。如果你把这个作为一个答案,我可以给你的信用。谢谢嗯,这似乎不是一个很好的答案,所以我做了一个评论。我不是真的担心信誉点,只是想帮你,但谢谢你。原来从我的GetMachine方法返回的域类似于server.Domain.com,但我想windows需要类似服务器的soemthing。原来这只是个愚蠢的问题,但谢谢你的帮助。