Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIDSMTP.Connect = Speicherfresser?? (https://www.delphipraxis.net/20056-tidsmtp-connect-%3D-speicherfresser.html)

JamesBlond 13. Apr 2004 07:43


TIDSMTP.Connect = Speicherfresser??
 
Hallo!
Hab einen Emailversand mit der INDY-Komponente realisiert. Es funktioniert auch, allerdings hab ich dazu mal ne Frage:
Ich verwende die ganzen Indy-Komponenten nur als lokale Variablen in einer Subprozedur, d.h. die Objekte sind nicht immer vorhanden, sondern werden halt ggf. erzeugt.
Wenn ich nun mit IDSMTP1.Connect die Verbindung herstellen möchte, klappt das auch problemlos. Allerdings belegt dies 2000 K Speicher(!!)
Warum wird der Speicher nach Ende der Prozedur nicht wieder freigegeben? (Obwohl ein IDSMTP1.Free durchgeführt wird)?
Bin für alle Anregungen dankbar!

Gruß

Matthias

Brüggendiek 13. Apr 2004 20:09

Re: TIDSMTP.Connect = Speicherfresser??
 
Hallo Matthias!

Wächst der Speicherverbrauch bei jedem Aufruf der entsprechenden Prozedur oder wird nur nach dem ersten Aufruf der belegte Speicher nicht weniger?

Daß der einmal belegte Speicher erst zum Programmende wieder ans System zurückgegeben wird, ist ganz normal - man könnte ja wieder was brauchen. In diesem Zusammenhang fallen dynamische Arrays sehr unangenehm auf, bei einer Vergrößerung wird alles umkopiert und damit neuer Speicher belegt.

Die Indys sind erst ab D4 verfügbar, weil sie mit dynamischen Arrays arbeiten - und die gibt es erst seit D4!

Prüfe Dein Programm mal mit MemProof - das zeigt Speicherlecks sehr zuverlässig an.

Sollten sich Speicherlecks finden, müssen wir für Hilfestellung wohl doch Roberto Blanco (das ist der deutsche Sänger, an den sich die Leute nur dunkel erinnern können - eigene Aussage!) sinngemäß zitieren:
Zitat:

Ein bißchen Source muß sein!
Gruß

Dietmar Brüggendiek

JamesBlond 13. Apr 2004 21:35

Re: TIDSMTP.Connect = Speicherfresser??
 
Hallo!
Erstmal danke für die Antwort.
Der Speicher steigt nur beim 1. Aufrufen an. Gibt es keine Möglichkeit, den Speicher auch während des Programmes an das BS zurückzugeben? (Es soll ein Windows-Service werden, der ggf. bis zu x Jahren am Stück läuft...)
Wie funktioniert dieses Memproof denn? Hab's mir wohl runtergeladen, aber ich steig da überhaupt nicht durch, was mir das Programm da so anzeigt.
Wäre für ne kleine Starthilfe (was Memproof angeht) sehr dankbar.

Danke & Gruß

Matthias

neolithos 13. Apr 2004 21:50

Re: TIDSMTP.Connect = Speicherfresser??
 
Zitat:

Zitat von JamesBlond
Der Speicher steigt nur beim 1. Aufrufen an.

Das ist völlig normal und häufig bei Windows-Componenten. Das selbe zeigt sich übrigens auch bei Fenstern.

In diesem Fall kann es auch an der WinSock liegen die darunter liegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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