2

WMIを介して大量のデータをクエリする場合(たとえば、WindowsイベントログWin32_NTLogEvent)、すべてのコンテンツをダウンロードする前に、どのような種類の数値を取得しているかを知ることが非常に役立ちます。これを行う方法はありますか?

私が知っていることから、WQLには「SelectCount(*)FROMWin32_NTLogEvent」はありません。

私が知っていることから、ManagementObjectCollectionのCountプロパティは、Rewindableプロパティがtrueまたはfalseに設定されているかどうかに関係なく、すべての結果を実際に列挙します。

.NETで実行できない場合は、基盤となるIWbemオブジェクトを直接使用して実行できますか?

4

2 に答える 2

4

基になるIWbemオブジェクトも列挙を返します。
たとえば、IWbemServices::ExecQueryメソッドはIEnumWbemClassObjectを返します

ただし、いくつかのアイデアについては、列挙パフォーマンスの向上を参照してください。
特に、WBEM_FLAG_FORWARD_ONLY
C#を使用している場合は、 EnumerationOptions.Rewindableをfalseに設定してManagementObjectSearcherを呼び出すと思います。巻き戻し可能はデフォルトでtrueであるため、オフにするとある程度の改善が見られます。

(クエリで1つの(キー)プロパティを要求するだけで、パフォーマンスが向上するかどうかを確認することもできます。たとえばSelect RecordNumber FROM Win32_NTLogEvent、代わりにSelect * FROM Win32_NTLogEvent
理論的には、インスタンス化する必要のある情報はそれほど多くありませんが、実際にはすべてを列挙する必要があります。 、そしてそれから何か改善が見られたかどうかは覚えていません。ただし、タイミングチェックの価値があります。)

于 2010-05-19T19:22:04.713 に答える
1

できないようです。次善の策は、ダリンによって上で提供された答えです。

于 2010-08-27T14:30:56.530 に答える