Delen via


Opsommingsprestaties verbeteren

Opsommingen gebruiken meestal een aanzienlijke hoeveelheid systeembronnen. Daarom moet u proberen het WMI-opsommingsproces te optimaliseren als u van plan bent om opsommingen uit te voeren voor een grote groep. Scripts kunnen ook een query gebruiken om prestatieverlies te voorkomen in 'Voor elke...Volgende'-operaties met een grote set. Zie Query's uitvoeren op WMI-voor meer informatie.

In de volgende procedure wordt beschreven hoe u de inventarisatieprestaties kunt verbeteren.

Om de inventarisatieprestaties te verbeteren

  1. Stel de parameter lFlags in om semisynchrone teruggave van de gegevens mogelijk te maken met een enumerator die elk item van WMI verwerpt terwijl het wordt geleverd. Zie Een methode aanroepenvoor meer informatie.

    In het volgende C++-codevoorbeeld ziet u hoe u de WBEM_FLAG_RETURN_IMMEDIATE- en WBEM_FLAG_FORWARD_ONLY-vlaggen gebruikt.

    WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY

    Gebruik in VBScript of Visual Basic de scriptmarkeringen WbemFlagReturnImmediately en WbemFlagForwardOnly van WbemFlagEnum. De gecombineerde waarde van deze vlaggen is decimaal 48.

    De script- en parametervlagmen veroorzaken het volgende gedrag:

    • De WBEM_FLAG_RETURN_IMMEDIATE of wbemFlagReturnImmediately vlag vraagt semisynchroon gedrag aan. De aanroep voor het maken van de enumerator wordt onmiddellijk uitgevoerd. Vervolgens kunt u beginnen met het doorlopen van de objectset die u ontvangt.
    • De WBEM_FLAG_FORWARD_ONLY vlag of wbemFlagForwardOnly vlag vraagt een opsomming aan die u niet kunt terugspoelen. Dat wil gezegd, WMI kan een object vrijgeven nadat u het object hebt bekeken.

    In situaties waarin de opsomming groot is en de toepassing zeer snel is, kunnen WMI met behulp van doorstuur-enumerators met semisynchrone verwerking veel minder objecten vasthouden, waardoor de reactietijd en geheugenprestaties aanzienlijk toenemen.

    In het volgende VBScript-codevoorbeeld ziet u hoe u een aanroep kunt doen met behulp van de gecombineerde wbemFlagReturnImmediately en wbemFlagForwardOnly vlaggen om een verzameling gebeurtenissen uit een gebeurtenislogboek te verkrijgen.

    Set Events = GetObject("winmgmts:").ExecQuery _
         ("SELECT * FROM Win32_NTLogEvent " _
          & "WHERE Logfile = 'System'",,48)
    
  2. Vermijd waar mogelijk het gebruik van CreateInstanceEnum- in C++ of SWbemServices.InstancesOfen gebruik in plaats daarvan ExecQuery-.

    De methode ExecQuery voert een query uit op WMI met behulp van databasetechnologieën, terwijl CreateInstanceEnum of SWbemServices.InstancesOf WMI-objecten opsommen. In het bijzonder kan ExecQuery- specifieke subsets van gegevens aanvragen die niet door de opsommingsmethoden kunnen worden gebruikt.

    Omdat sommige providers geen querymogelijkheden hebben, biedt WMI een functie 'postfilter' waarmee WMI exemplaren kan verwijderen die niet voldoen aan de specificaties van een query. Of een bepaalde provider gebruikmaakt van deze functie is aan de auteur van de provider.

  3. Experimenteer met verschillende query's om te bepalen wat u de beste prestaties geeft.

    WMI verwerkt bijvoorbeeld zelden query's met WHERE clausules van de vorm Prop1 < "x". WMI verwerkt daarentegen normaal gesproken query's van de vorm KeyProp1 = "x".

Voor meer informatie, zie Een overzicht van WMI.