AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory-Leak WMI

Ein Thema von El.Blindo · begonnen am 30. Jan 2007 · letzter Beitrag vom 7. Feb 2007
Antwort Antwort
Seite 2 von 2     12   
El.Blindo

Registriert seit: 24. Okt 2006
18 Beiträge
 
#11

Re: Memory-Leak WMI

  Alt 30. Jan 2007, 22:09
Wieso kann man den nicht testen ? Muss nur die WbemScripting_TLB über Import Type Library in das Project importieren, ist alles bei Delphi bei.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Memory-Leak WMI

  Alt 30. Jan 2007, 22:14
Ich habe leider kein WbemScripting.
  Mit Zitat antworten Zitat
El.Blindo

Registriert seit: 24. Okt 2006
18 Beiträge
 
#13

Re: Memory-Leak WMI

  Alt 30. Jan 2007, 22:49
Die ist zumindestens bei Delphi 7 dabei. Ausserdem hab ich gesehen das man hier irgendwo im Forum die WbemScripting.pas downloaden kann, such mal nach WMI.

Aber zurück zum Thema:

Ich hab mal ein wenig geguckt und eine Componente für WMI gefunden bei Magnenta Systems. Dieser Componente liegt eine Beispiel Application bei. (Wobei, eigentlich will ich keine fertige Componente verwenden, ich will das selbst kapieren)

Also gestartet das Ding, und siehe da, bei wiederholtem Abfragen einzelner Werte = MEMORY-Leak. Also entweder machen die zufällig excakt die selben Fehler wie ich, oder der fehler liegt im WMI.

Scheint also tatsächlich am WMI selbst zu liegen, Schade, ist ein mächtiges Werkzeug, aber seit wann macht M$ schon mal was richtig.

Kleines Edit:

Hab mir mal so einige Sachen hier im Forum angeschaut, z.B. Himitsu's WMI+Demo usw., musste dabei feststellen das dieses Memory Leak wohl in jeder Application vorhanden ist.

Vielleicht liegt es daran das ich SP2 nicht drauf hab, aber ehrlich gesagt hab ich kein Bock nur deswegen SP2 zu installieren, eigentlich hab ich gar keinen Bock SP2 zu installieren.

Mal sehen, Morgen Abend krieg ich meinen Lappy wieder, da is Media Center SP2 drauf, schaun wie es da ist.

Und weiter versucht, andere variante zum Auslesen von WMI, abgeguckt hier im Forum. Das memory Leak bleibt

Delphi-Quellcode:
procedure TForm1.getWMIProcess(Liste:TStrings);
var
   l_WMILocator: ISWbemLocator;
   l_WMIServices: ISWbemServices;
   l_WMIObjectDefinition: ISWbemObject;
   l_WMIObjectSet: SWbemObjectSet;
   l_WMIObjectInstances: IEnumVariant;
   l_WMIObject: ISWbemObject;
   l_WMIPropertySet: ISWbemPropertySet;
   l_WMIProperty: ISWbemProperty;

   l_TempObj: OleVariant;
   PropVal : OLEVariant;
   l_ObjValue: Cardinal;

   WMI_Name : String;
   WMI_PID : uint64;
   WMI_Tick : uint64;
   WMI_UTime : uint64;
   WMI_KTime : uint64;
   WMI_Mem : uint64;

   function GetValue(Value : String) : Variant;
   begin
     try
       PropVal := (l_WMIObject.Properties_.Item(Value, 0) as ISWbemProperty).Get_Value;
       if not (VarIsEmpty(PropVal) or VarIsNull(PropVal)) then Result := PropVal;
     except
     end;
   end;

begin
   Memo1.Lines.BeginUpdate;
   Memo1.Clear;
   l_WMILocator := CoSWbemLocator.Create;
   try
     If l_WMILocator <> nil then
     Begin
       l_WMIServices := L_WMILocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
       If l_WMIServices <> nil then
       Begin
         l_WMIObjectSet := l_WMIServices.ExecQuery('SELECT * FROM Win32_Process', 'WQL',
                                                wbemFlagReturnWhenComplete, nil);
         If l_WMIObjectSet <> nil then
         with l_WMIObjectSet do
         Begin
           l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant;
           If l_WMIObjectInstances <> nil then
           begin
             If l_WMIObjectSet.Count > 0 then
             Begin
               while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do
               begin
                 l_WMIObject:= IUnknown(l_TempObj) as ISWBemObject;
                 PropVal := (l_WMIObject.Properties_.Item('Name', 0) as ISWbemProperty).Get_Value;
                 if not (VarIsEmpty(PropVal) or VarIsNull(PropVal)) then
                 Begin
                   WMI_Name := GetValue('Name');
                   WMI_PID := GetValue('ProcessId');
                   WMI_Mem := GetValue('WorkingSetSize') div 1024;
                   WMI_UTime := GetValue('UserModeTime');
                   WMI_KTime := GetValue('KernelModeTime');
                 end;
                 Liste.Add(IntToStr(WMI_PID) + ' : ' + WMI_Name + ' - ' +
                           IntToStr(WMI_Mem) + ' K ' +
                           InttoStr(WMI_UTime + WMI_KTime));
               end;
             end;
           end;
         end;
       end;
     end;
   finally
     l_WMILocator := nil;
     l_WMIServices := nil;
   end;
   Memo1.Lines.EndUpdate;
end;
  Mit Zitat antworten Zitat
El.Blindo

Registriert seit: 24. Okt 2006
18 Beiträge
 
#14

Re: Memory-Leak WMI

  Alt 1. Feb 2007, 17:58
So, vorerst das letzte Update, bin am Ende mit meinem Latein.

Hab das Ganze mal unter Windows XP Media Center Edition SP2 getestet.

Resultat : Auch das selbe Memory-Leak. Also wenn hier keiner ne Idee hat
harke ich das Thema WMI einfach ab. Hab ja kein Problem damit eigene Fehler
zu suchen, aber auf Microsoft's Fehler hab ich leider keinen Einfluss.

MfG El-Blindo.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Memory-Leak WMI

  Alt 7. Feb 2007, 12:21
Moin El-Blindo,

mir fällt nur auf, dass Du zwar das Memo löscht, aber dann zu Liste Zeilen hinzufügst.
Das solltest Du vielleicht mal in Einklang bringen

Ausserdem könntest Du mal zu Beginn der Routine den Timer ab, und am Ende wieder einschalten.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz