C# 如何通过WMI高效地检索数据

C# 如何通过WMI高效地检索数据,c#,wpf,wmi,C#,Wpf,Wmi,我正在开发一个应用程序,它可以连接到远程主机并检索CPU利用率、RAM使用率、磁盘负载等指标。。。为了远程连接和检索这些指标,我使用Windows Management Instrumentation(WMI)。我为每个度量创建WQL查询。例如,为了访问4种类型的度量,我使用了4种不同的WQL查询,这导致了整个监控过程中的一些延迟。我的问题是,有没有办法只使用一个WQL(即只使用一次远程连接尝试),然后从该WQL查询的结果中检索必要的数据(度量)?我期待着你的答复。谢谢 更确切地说,我的应用程序

我正在开发一个应用程序,它可以连接到远程主机并检索CPU利用率、RAM使用率、磁盘负载等指标。。。为了远程连接和检索这些指标,我使用Windows Management Instrumentation(WMI)。我为每个度量创建WQL查询。例如,为了访问4种类型的度量,我使用了4种不同的WQL查询,这导致了整个监控过程中的一些延迟。我的问题是,有没有办法只使用一个WQL(即只使用一次远程连接尝试),然后从该WQL查询的结果中检索必要的数据(度量)?我期待着你的答复。谢谢

更确切地说,我的应用程序运行得如何:连接到3台主机并从每台主机收集2个不同的指标大约需要6秒。这是正常的性能比吗

我如何使用WQL获得可用RAM的数量:

string DomainPath = "\someserver.com\root\cimv2";
List<string> WQLresult = new List<string>();
ManagementObjectSearcher searcher = new ManagementObjectSearcher(DomainPath, "SELECT FreePhysicalMemory FROM Win32_OperatingSystem" );

try
{
    foreach (ManagementObject obj in searcher.Get())
    {
        WQLresult.Add(obj["FreePhysicalMemory"].ToString().Trim());
    }
}
catch (Exception ex)
{
}
string DomainPath=“\someserver.com\root\cimv2”;
List WQLresult=新列表();
ManagementObjectSearcher search=新的ManagementObjectSearcher(域路径,“从Win32_操作系统中选择FreePhysicalMemory”);
尝试
{
foreach(searcher.Get()中的ManagementObject对象)
{
WQLresult.Add(obj[“FreePhysicalMemory”].ToString().Trim());
}
}
捕获(例外情况除外)
{
}

我还使用Win32_PerfFormattedData_PerfOS_处理器类获取CPU数据,使用Win32_PingStatus类获取响应数据。可以看出,有3个不同的类。问题是,是否可以仅使用1个WQL来获取这些数据?

您正在检索什么指标?你能给我们看一些代码/查询吗?请看一下主题,我添加了我想要使用的代码和指标。相对于什么有效?;)您正在获取所有信息“*”,请尝试指定您要查找的信息。Erno,谢谢您的建议,我更正了WQL查询。但是,它的性能没有任何变化。仍然缓慢:(