Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Service braucht immer mehr Speicher!!!!?????? (https://www.delphipraxis.net/19620-service-braucht-immer-mehr-speicher.html)

JamesBlond 6. Apr 2004 08:56


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

mirage228 6. Apr 2004 08:57

Re: Service braucht immer mehr Speicher!!!!??????
 
Vielleicht hilft dir ja
Delphi-Quellcode:
  FreeAndNil(List);
Du könntest zusätzlich noch prüfen, ob du irgendwo speicher mit GetMem reservierst aber nicht wiederfreigibst.

mfG
mirage228

JamesBlond 6. Apr 2004 09:41

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

Smokey 6. Apr 2004 09:46

Re: Service braucht immer mehr Speicher!!!!??????
 
Benutzt du in deiner Stringliste auch Objekte?
Wenn ja immer dran denken, was die Help dazu sagt :

Zitat:

Note: The TStringList object does not own the objects you add this way. Objects added to the TStringList object still exist even if the TStringList instance is destroyed. They must be explicitly destroyed by the application.
Wenn nicht, weitermachen !! :stupid:

Shylock 6. Apr 2004 09:46

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.)

JamesBlond 6. Apr 2004 10:22

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

APP 6. Apr 2004 11:45

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.

shmia 6. Apr 2004 12:31

Re: Service braucht immer mehr Speicher!!!!??????
 
Also ich würde so vorgehen:

- MemCheck downloaden und einbinden
- 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:

JamesBlond 6. Apr 2004 12:50

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:
List:= TStringList.Create;
und als letztes:
Delphi-Quellcode:
List.free;
Daran wirds wohl nicht liegen.
Trotzdem danke!

Gruß

Matthias

DelphiDeveloper 6. Apr 2004 13:07

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 23:49 Uhr.
Seite 1 von 2  1 2      

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