Aracılığıyla paylaş


VBScript ile Yarı Zaman Uyumsuz Çağrı Yapma

Bazı WMI yöntemleri büyük koleksiyonlar döndürerek betiklerin yanıt vermeyi durdurmasına neden olabilir. Betikte, yarı eşzamansız erişim varsayılan değerdir ve Windows Yönetim Araçları (WMI), aşağıdaki SWbemServices yöntemleri gibi büyük nesne koleksiyonları döndürebilen çağrılar için wbemFlagReturnImmediately ayarlar: InstancesOf, SubclassesOf, ExecQuery, AssociatorsOfve ReferencesTo.

IFlags parametresinde wbemFlagReturnImmediately kullanan yarı eşzamanlı erişim, aşağıdaki SWbemObject yöntemleri için büyük nesne kümeleri döndürebilen çağrılar için de varsayılandır: Instances_, Subclasses_, Associators_ve References_.

Büyük bir nesne koleksiyonunu işlerken WMI bellek kaynağı kullanımını azaltmak için IFlags parametresine wbemFlagForwardOnly değerini ekleyin. wbemFlagForwardOnly kullanılması, WMI'nin koleksiyonu geri sarma ve öğelere yeniden erişme izni vermeyen yalnızca ileri yönde bir enumerator oluşturmasına neden olur.

Her için deyimi bir nesneyi işlediğinden WMI her nesnenin belleğini ortadan kaldırır. Koleksiyonu alan çağrıda wbemFlagForwardOnly bayrağı ayarlandığında bir koleksiyon için Count yöntemini çağıramazsınız. Unutmayın ki, IFlags parametresi varsayılan olarak wbemFlagReturnImmediately ve wbemFlagForwardOnly ayarlarına sahip olarak SWbemServices.ExecNotificationQuery yöntemi için belirlenmiştir.

Aşağıdaki yordamda, yarı zaman uyumsuz çağrı yapmak için VBScript'in nasıl kullanılacağı açıklanmaktadır.

VBScript'te yarı eşzamanlı çağrı yapmak için

  1. IFlags parametresini wbemFlagReturnImmediatelydeğerine ayarlayın.
  2. SWbemServices.ExecQuery veya SWbemServices.ExecNotificationQuery için iFlags değeriyle normal zaman uyumlu çağrıyı yapın.
  3. Çağrısı tarafından döndürülen nesneleri bir koleksiyon olarak işlemek istiyorsanız, VBScript For Eachgibi bir numaralandırma söz dizimi kullanın. Her nesne döndürüldükçe, koleksiyondaki bir sonraki öğe olarak işlenir.
  4. wbemFlagReturnImmediately değerini wbemFlagForwardOnlydeğeriyle birleştirerek yalnızca ileriye doğru bir numaralandırıcı oluşturun. Bu OR işleminin ondalık değeri 48'dir. Bu sabitler Visual Basic için wbemdisp.tlb tür kitaplığında tanımlanır. Çoğu betik dili sayısal değeri kullanır veya bir sabit tanımlar. Daha fazla bilgi için bkz. WbemFlagEnum .

Aşağıdaki kod örneği, yarı zaman uyumsuz yöntem çağrısının nasıl yapılacağını gösterir. Daha fazla bilgi için, Yöntem Çağırma konusuna vebakın.

wbemFlagReturnImmediately = 16
wbemFlagForwardOnly = 32
IFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly
WScript.Echo IFlags
Set objWMIService = GetObject("winmgmts:root\cimv2")
' Query for all the Win32_Process objects on the 
'     local computer and use forward-only enumerator
Set colProcesses = objWMIService.ExecQuery("SELECT Name FROM Win32_Process",,IFlags)
' Receive each object as it arrives
For Each objProcess in colProcesses
    WScript.Echo objProcess.Name
Next

Bir Yöntemi Çağırma