Как получить количество ManagementObjects (результаты WMI) без перечисления в коллекции в .NET - PullRequest
2 голосов
/ 22 апреля 2010

При запросе большого количества данных через WMI (скажем, журнал событий Windows Win32_NTLogEvent) очень полезно знать, в какие числа вы вводите себя, прежде чем загружать весь контент. Есть два способа сделать это?

Из того, что я знаю, в WQL нет "Select Count (*) FROM Win32_NTLogEvent".

Из того, что я знаю, свойство Count группы ManagementObjectCollection фактически перечисляет все результаты независимо от того, установлено ли для свойства Rewindable значение true или false.

Если это невозможно сделать в .NET, можно ли это сделать напрямую, используя базовые объекты IWbem Спасибо

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Базовые объекты IWbem также возвращают перечисление.
Например. Метод IWbemServices :: ExecQuery возвращает IEnumWbemClassObject

Тем не менее, см. Улучшение производительности перечисления для нескольких идей.
Примечательно, что WBEM_FLAG_FORWARD_ONLY.
Если вы находитесь в C #, я предполагаю, что он будет вызывать ManagementObjectSearcher с EnumerationOptions.Rewindable , установленным в false. Rewindable по умолчанию имеет значение true, поэтому отключение должно дать некоторое улучшение.

(Вы также можете профилировать, чтобы увидеть, есть ли улучшение производительности, если вы просто запросите одно (ключевое) свойство в своем запросе. Например, Select RecordNumber FROM Win32_NTLogEvent вместо Select * FROM Win32_NTLogEvent.
Теоретически не так много информации нужно было бы создавать, хотя в действительности ей все еще приходится перечислять все, и я не помню, видел ли я когда-либо улучшение от этого. Хотя стоит проверить время.)

1 голос
/ 27 августа 2010

Похоже, что это невозможно сделать. Следующая лучшая вещь - это ответ Дарина, приведенный выше.

...