Hallo
Habe auch das Problem mit der
WMI.
Ich habe die
WMI.pas aus der
WMI Demo mit in mein Projekt eingebunden und greife darauf zu. Doch bei jedem aufruf steigt der Speicher um 20-30KB an. Wenn man da nur ein oder zweimal drauf zugreift is das ja noch ok aber ich benötige mehrere zugriffe um änderungen festzustellen. und da steigt der speicherbedarf mit der zeit enorm.
Es liegt definitiv an der
WMI.pas. die demo hat das selbe problem. also wird da irgendwo der speicher nicht wieder freigegeben.
Hier mal ein Teil code von mir wie ich auf die
WMI zugreife:
Delphi-Quellcode:
comp:='
.';
namespace:='
root\CIMV2';
username:='
';
pass:='
';
if vistaplus
then
query:='
SELECT Caption, Size, Partitions, SerialNumber, Signature FROM Win32_DiskDrive'
else
query:='
SELECT Caption, Size, Partitions, Signature FROM Win32_DiskDrive';
if not WMIGetInfo(comp, namespace, username, pass, Trim(
query), WMIResults)
then //Hier ist der erste Zugriff. und dieser
begin //verursacht schon den speicheranstieg
wmidrives[0,0] := '
ERROR';
wmierror:=true;
Exit;
end
else
wmierror:=false;
wmidrives[0,0] := '
';
if WMIResults.Instance =
nil then
begin
wmierror:=true;
Exit;
end
else
wmierror:=false;
....
Wäre super wenn da jemand nachgucken könnte der sich damit auskennt. Ich könnte mir evtl vorstellen, dass das durch
setlength() ausgelöst wird. weil das ja auch verwendet wird darin. Aber ich weiß es nicht
Hier nochmal die
WMI.pas im Anhang: