2

当通过 WMI 查询大量数据时(比如 windows 事件日志 Win32_NTLogEvent),在下载所有内容之前了解自己输入的数字是非常有用的。有两种方法吗?

据我所知,WQL 中没有“Select Count(*) FROM Win32_NTLogEvent”。

据我所知,ManagementObjectCollection 的 Count 属性实际上枚举了所有结果,无论您将 Rewindable 属性设置为 true 还是 false。

如果不能在.NET中完成,可以直接使用底层的IWbem对象来完成吗 谢谢

4

2 回答 2

4

基础 IWbem 对象也返回一个枚举。
例如,IWbemServices::ExecQuery 方法返回一个IEnumWbemClassObject

但是,请参阅提高枚举性能以获得一些想法。
值得注意的是,WBEM_FLAG_FORWARD_ONLY.
如果您使用 C#,我猜它会调用ManagementObjectSearcher并将EnumerationOptions.Rewindable设置为 false。Rewindable 默认情况下为 true,因此将其关闭应该会有所改进。

(如果您只在查询中要求一个(关键)属性,您还可以分析以查看是否有任何性能改进。例如Select RecordNumber FROM Win32_NTLogEvent,而不是Select * FROM Win32_NTLogEvent
理论上不需要实例化那么多信息,但实际上它仍然必须枚举所有内容,我不记得我是否从中看到了任何改进。不过,值得进行时间检查。)

于 2010-05-19T19:22:04.713 回答
1

看来是做不到了。下一个最好的事情是 Daryn 上面提供的答案。

于 2010-08-27T14:30:56.530 回答