![]() |
Service braucht immer mehr Speicher!!!!??????
Hallo!
Ich habe einen Windows-Service geschrieben. Der funktioniert soweit auch wunderbar, allerdings braucht der immer mehr Speicher: Er fängt an mit ca. 2.000 K; nach ca. 5 Minuten ist er dann bei ca. 20.000 K Mit Debug hab ich inzwischen herausgefunden, dass es an einer TStringList liegt, die immer wieder gefüllt wird. Aber waraum? Denn nachdem ich die Daten entsprechend verarbeitet habe, sollte der Speicherplatz doch wieder freigegeben werden. (Ich verwende die Methode: List.Free;) Das sollte doch funktionieren, oder mach ich beim Freigeben des Speichers was falsch? Danke! Gruß Matthias |
Re: Service braucht immer mehr Speicher!!!!??????
Vielleicht hilft dir ja
Delphi-Quellcode:
Du könntest zusätzlich noch prüfen, ob du irgendwo speicher mit GetMem reservierst aber nicht wiederfreigibst.
FreeAndNil(List);
mfG mirage228 |
Re: Service braucht immer mehr Speicher!!!!??????
Super, es ist schonmal erheblich weniger geworden, aber er steigt weiter kontinuierlich. (Hatte auch noch ein FreeMem vergessen)
Gibt es evtl. eine Möglichkeit, zu überwachen, welche Variablen gerade im Speicher liegen und wieviel Platz die belegen? Schon mal vielen Dank! Gruß Matthias |
Re: Service braucht immer mehr Speicher!!!!??????
Benutzt du in deiner Stringliste auch Objekte?
Wenn ja immer dran denken, was die Help dazu sagt : Zitat:
|
Re: Service braucht immer mehr Speicher!!!!??????
Hi.
Ich hab irgendwo im Kopf rumschwirren, dass Programme sehr ungern den Speicher tatsächlich wieder frei geben. Auch nach einem x.free. Das Objekt ist dann zwar aus deinem Speicher entfernt, aber dein Programm gibt den Speicher nicht an Windows zurück. Wäre es vieleicht eine Möglichkeit statt immer eine neue Stringlist zu benutzen eine StringList zu verwenden und diese immer wieder zu löschen (sl.clear)? Dann hast du nur ein Objekt und die StringList braucht maximal so viel Speicher, wie der längste String, den du in ihr gespeichert hast (plus overhead). Korrigiert mich, wenn ich falsch liege. (FreeAndNil dürfte sich genauso verhalten, da es nichts anderes macht als die Referenz vor dem Freigeben auf nil zu setzen. Ich bevorzuge übrigens diese Methode um ein Objekt freizugeben.) |
Re: Service braucht immer mehr Speicher!!!!??????
Hallo!
Leider hat das alles nichts gebracht. Der Speicher wächst weiter. So langsam weiß ich echt nicht mehr, woran es liegt. Kann man sich die benötigte Speichergröße einer Variable zur Laufzeit anzeigen lassen? Gruß Matthias |
Re: Service braucht immer mehr Speicher!!!!??????
Hallo Matthias,
ich nehme an, Du arbeitest in Deinem Service mit einer (Endlos-)schleife. Kann es sein, dass Du die Stringliste in der Schleifer immer neu erzeugst und befüllst, aber nur ausserhalb der Schleife zerstörst? Ansonsten solltest Du uns ein bißchen was von Deinem Code zeigen. |
Re: Service braucht immer mehr Speicher!!!!??????
Also ich würde so vorgehen:
- ![]() - den Service zunächst nur als "normale" Anwendung laufen lassen (dies lässt sich bestimmt über bedingte Compilierung oder einen Startparameter managen) Beim Beenden der Anwendung gibt MemCheck die Speicherlecks aus. Kommerzielle Tools wie z.B. Boundschecker leisten noch mehr wie MemCheck, aber MemCheck ist wie der Author verspricht: "what you get is what you need". :thuimb: |
Re: Service braucht immer mehr Speicher!!!!??????
Hallo!
Werde die Tips gleich mal ausprobieren. @APP Nein, ich arbeite mit einem Timer. OnTimer wird dann immer eine Prozedur aufgerufen. Diese macht als erstes:
Delphi-Quellcode:
und als letztes:
List:= TStringList.Create;
Delphi-Quellcode:
Daran wirds wohl nicht liegen.
List.free;
Trotzdem danke! Gruß Matthias |
Re: Service braucht immer mehr Speicher!!!!??????
wie siehts aus mit der frage von @Smokey
haengst du in die Stringliste objekte? wenn ja muessen die explizit abgeraeumt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz