Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Speicherauslastung im Taskmanager wird immer größer
tortom1000 - Mi 23.02.11 12:51
Titel: Speicherauslastung im Taskmanager wird immer größer
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 [
http://www.swissdelphicenter.ch/de/showcode.php?id=1322] 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 - 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. :nixweiss: 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. :nixweiss:
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. :idea:
cu
Narses
jaenicke - 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. :nixweiss: |
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 - 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?
jaenicke - 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 - 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...
jaenicke - Do 24.02.11 14:56
Du hast das Formular in der Unit1.pas + Unit1.dfm im Verzeichnis drüber vergessen. ;-)
tortom1000 - 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.
tortom1000 - 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 - 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
jaenicke - 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 - 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 :P
jaenicke - Di 01.03.11 16:49
Bergmann89 hat folgendes geschrieben : |
p.s: cool, mein 1. Beitrag, dem ich vom handy aus geschrieben hab :P |
Bei meinen vom Handy aus stimmt trotzdem die Groß- und Kleinschreibung. :P
Bergmann89 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!