¿Cómo puedo mejorar el rendimiento de WMI usando delphi?
Escribí una función simple para recuperar información del sistema usando el WMI, pasando como parámetro la clase y el nombre de la propiedad. cuando ejecuto la función como esta
<code> Writeln('Procesor Id '+GetWMIInfo('Win32_Processor','Name')); Writeln('Mother Board Serial '+GetWMIInfo('Win32_BaseBoard','SerialNumber')); Writeln('BIOS Version '+GetWMIInfo('Win32_BIOS','Version')); </code>
El tiempo de ejecución es de unos 1300 ms.
Necesito recuperar mucha información adicional. ¿Es posible reducir el tiempo de ejecución de esta función?
Esta es una aplicación de ejemplo con la función.
<code>{$APPTYPE CONSOLE} uses Diagnostics, SysUtils, ActiveX, ComObj, Variants; function GetWMIInfo(const WMIClass, WMIProperty:string): string; var sWbemLocator : OLEVariant; sWMIService : OLEVariant; sWbemObjectSet: OLEVariant; sWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; Result:=''; sWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); sWMIService := sWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); sWbemObjectSet:= sWMIService.ExecQuery('SELECT * FROM '+WMIClass,'WQL'); oEnum := IUnknown(sWbemObjectSet._NewEnum) as IEnumVariant; if oEnum.Next(1, sWbemObject, iValue) = 0 then Result:=sWbemObject.Properties_.Item(WMIProperty).Value; end; var SW : TStopwatch; begin try CoInitialize(nil); try SW.Reset; SW.Start; Writeln('Procesor Id '+GetWMIInfo('Win32_Processor','Name')); Writeln('Mother Board Serial '+GetWMIInfo('Win32_BaseBoard','SerialNumber')); Writeln('BIOS Version '+GetWMIInfo('Win32_BIOS','Version')); SW.Stop; Writeln('Elapsed ms '+FormatFloat('#,0.000',SW.Elapsed.TotalMilliseconds)); finally CoUninitialize; end; except on E:Exception do Writeln(E.Classname, ':', E.Message); end; Readln; end. </code>