C# 对多个类执行单个WMI查询,是否可能?

C# 对多个类执行单个WMI查询,是否可能?,c#,.net,vb.net,windows,wmi,C#,.net,Vb.net,Windows,Wmi,我需要对不同的WMI类执行各种查询,而不是逐个执行查询,以提高执行速度,我在本文中想到: 在C或VB.Net中,我想知道是否可以通过单个查询一次检索多个类的属性 随机非功能性示例: Using wmi As New Management.ManagementObjectSearcher( "select SerialNumber from Win32_BaseBoard, select Caption from Win32_Process" ) ... End Using 如果是,

我需要对不同的WMI类执行各种查询,而不是逐个执行查询,以提高执行速度,我在本文中想到:

在C或VB.Net中,我想知道是否可以通过单个查询一次检索多个类的属性

随机非功能性示例:

Using wmi As New Management.ManagementObjectSearcher(
    "select SerialNumber from Win32_BaseBoard, select Caption from Win32_Process"
)

...

End Using

如果是,哪种查询语法是正确的?

使用NET 4.5:

导入系统。管理 导入System.Collections.Concurrent 导入System.Threading.Tasks Dim wql As String={从Win32_基板选择SerialNumber, 从Win32_BIOS中选择名称, 从Win32\u VideoController中选择视频处理器, 从Win32_OperatingSystem}中选择RegisteredUser 将任务设置为新的任务列表 对于wql中的每个q Dim t As task=task.RunSub Dim str=WMI.GetWMIClassPropertyq wList.Addstr 端接头 任务。添加 下一个 Task.WaitAlltasks.ToArray 这是NET 4.0版本:

Dim wmiAction As ActionOf Object=SUB As Object Dim str=WMI.GetWMIClassPropertys.ToString wList.Addstr 端接头 将任务设置为新的任务列表 对于wql中的每个q 将t作为新任务调整,q 任务。添加 t、 开始 下一个 Task.WaitAlltasks.ToArray WMI.GetWMIClassProperty只是为查询创建一个搜索器,并返回第一个属性或String.Empty

使用秒表,需要72-80毫秒才能连续运行4个,15-20毫秒才能运行,因为任务网络4版本慢2-3毫秒。几乎同样快的18-25ms是Parallel.ForEach,但似乎是一个较低的速度,但也适用于NET 4.0:

Parallel.ForEachwql,SubthisQ Dim str=WMI.GetWMIClassPropertythisQ wList.Addstr 端接头
这四个方法在wList中返回相同的结果,尽管顺序不同,所以您需要一种方法来限定哪些结果是哪个结果。如果您查询一些速度非常慢的WMI类,差异确实会增加

您的问题的答案可能是否定的:是什么让您认为组合查询不会简单地花费2ce那么长的时间?@puropoix,我对Win32_进程执行时间与进程类GetProcesses进行了一些时间测量,但您可以在任何地方看到这一点,我一直听说WMI与其他方法在.Net类库下检索相同的信息所花费的时间有很大的不同,我也没有做过任何查询,但异步方法非常好,谢谢@puropoix。