Autor |
Beitrag |
tortom1000
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Mi 23.02.11 12:51
Hallo,
folgende Zeilen erhöhen pro Aufruf 4 KB Speicherbedarf laut Taskmanager:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ServiceManager := TServiceManager.Create; try ServiceManager.Connect; ServiceManager.OpenServiceConnection(pchar(dienst[i])) if ServiceManager.ServiceStopped then dienststarten:='ja'; finally FreeAndNil(ServiceManager); end; |
Die zugrunde liegende Unit ServiceManager habe ich von swissdelphicenter und entsprechend eingebunden.
Kennt jemand das Problem bzw. kann helfen, das Problem zu erkennen/lösen?
Moderiert von Narses: Delphi-Tags hinzugefügt
Moderiert von Narses: URL-Tag hinzugefügt.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 23.02.11 14:19
Moin!
tortom1000 hat folgendes geschrieben : | Kennt jemand das Problem bzw. kann helfen, das Problem zu erkennen/lösen? |
Ich würde das erstmal nicht als "Fehler", sondern als "Effekt" bezeichnen.  Ich habe mir die Klasse TServiceManager jetzt nicht im Detail angesehen, aber dort wird ordentlich mit PChars hantiert. Das kann eine Menge temporärer Strings auf dem Heap erzeugen, wenn da Concatenations gemacht werden. Das wiederum soll wohl (laut jaenicke) bei Delphi-Versionen vor XE zu "Problemen" im Speichermanager geführt haben.
Ich habe so ähnliche Effekte auch schon bei einem meiner Tools (da waren allerdings auch Threads im Spiel) bemerkt. Allerdings hat auf lange Sicht der Speicherbedarf im Taskmanager auch mal wieder abgenommen. Das muss nicht gleich ein Mem-Leak sein.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 23.02.11 15:04
Narses hat folgendes geschrieben : | Das wiederum soll wohl (laut jaenicke) bei Delphi-Versionen vor XE zu "Problemen" im Speichermanager geführt haben.  |
Der Übergang ist nicht unbedingt XE, auch ab Delphi 2006 hat sich da durch FastMM einiges getan.
Hier kann ich das Problem weder mit 2006 noch mit XE nachvollziehen, hab aber grad auch nicht die Zeit es mir wirklich anzuschauen.
Um welche Delphiversion geht es denn? Kannst du ein Demoprojekt noch anhängen bitte?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 23.02.11 16:10
Hab mir die Unit grad nicht angeguckt, aber ist das "normal", dass da ein Open ausgeführt wird, ohne zugehöriges Close?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 23.02.11 16:19
Naja, ein kurzer Blick sagt mir, dass CloseServiceHandle jedenfalls nie aufgerufen wird. Ob das erforderlich wäre, weiß ich gerade nicht, müsste ich auch nachschauen.
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Do 24.02.11 14:03
Hallo,
ich nutze Delphi 7. Ich werde das Verhalten in einem übersichtlichen Demo-Projekt
mal isolieren und posten.
Brauche dazu aber ein bissel Zeit.
Vorab schon mal vielen Dank für eure Hilfen.
Gruß
Tortom
--- Moderiert von Narses: Beiträge zusammengefasst---
so, hier die demo...
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.02.11 14:56
Du hast das Formular in der Unit1.pas + Unit1.dfm im Verzeichnis drüber vergessen. 
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Fr 25.02.11 10:54
hupps,
sorry, da war ich gestern wohl nicht ganz bei der Sache...
Hier nun die funktionierende.
Über den Timer wird jede Sekunde der Dienst gestartet und
nach 1 Sekunde (per sleep) wieder gestoppt.
Pro Timerdurchlauf erhöht sich bei mir die Speicherauslastung
um 4 k, manchmal aber auch nicht(???) so regelmäßig.
Fakt ist jedoch, das die Speicherauslastung anwächst.
Einloggen, um Attachments anzusehen!
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 25.02.11 16:57
Hey,
wenn es wirklich an der Speicherverwaltung liegt, dann gibts auch ne FastMM4-Unit für Delphi7. Ich benutzt die auch seit einiger Zeit und kann mich nicht beschweren.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Di 01.03.11 10:24
Hallo Bergmann,
was genau macht denn die FastMM4-Unit?
Ist es ein Tool, um Fehler zu "entdecken", die dann per eigener Änderung des Programms abgestellt werden müssen
oder korrigiert das Tool diese "Fehler" selbst.
Gibt es dazu 'ne Anleitung. (Hab wenig auklärendes darüber im Netz gefunden...)
Viele Grüße
Tortom
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 01.03.11 10:53
Fastmm4 kann dir zb zeigen ob und wo du speicherlecks hast. Ob es noch mehr kann weiß ich nicht, ich habs vorrangig immer dafür verwendet.
Von selbst die fehler beheben kann das ding ber (noch) nicht, das bleibt weiterhin an dir hängen.
Lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 01.03.11 11:51
Wenn du den FullDebug-Mode anschaltest, bekommst du ein ausführliches Log inkl. Stacktrace, wenn entweder ein Speicherleck auftritt oder wenn auf ein bereits freigegebenes Objekt zugegriffen wird.
Was welche Option bewirkt ist sehr sehr ausführlich in der .inc Datei definiert.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 01.03.11 16:43
Hey,
außer dem debug mode (der auch sehr nützlich is) kann man noch bisl mehr speicher raus holen. Steht auch mit in der beschreibung in der unit. Bei 64bit systemen war es glaube 4gb. Bei 32bit systemen bisl weniger, aber immernoch mehr als die standarspeicherverwaltung von delphi.
Mfg Bergmann
p.s: cool, mein 1. Beitrag, dem ich vom handy aus geschrieben hab 
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 01.03.11 16:49
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 01.03.11 16:56
Hey,
dazu hatte ich jetz keine lust^^ es is früh am morgen und ich lieg noch im bett xD
Mfg Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|