![]() |
Re: Memory Leak durch Thread?
Nein, hab ich nicht. Bekomme ich mit GetProcessMemoryInfo nicht dieselbe Aussage?
Ich habe sicher ein Leck. Ich habe einen zweiten Testthread ins Programm eingebaut und der macht mir keine dauerhafte Vergrößerung des Prozessspeichers. |
Re: Memory Leak durch Thread?
FastMM ist z.B. so ein Profiler, die ich in deinem anderen Thread-Thread (:)) erwähnt hatte. Und nein, er macht NICHT das selbe. Probier's einfach mal.
Edit: Und wenn alles nix hilft (probier FastMM aber wirklich vorher), zeig uns doch mal den gesamten Code deiner Thread-Klasse. |
Re: Memory Leak durch Thread?
FastMM ist offenbar ein mächtiges Tool, wenn man es zu nutzen weiß.
Ich habs mal ganz naiv eingebunden und festgestellt, dass nicht nur meine Threadobjekte lecken: Zitat:
Übrigens: Ich benutze garkeine Objekte vom Typ TWinHelpViewer bzw. THelpManager in meiner App. ??? |
Re: Memory Leak durch Thread?
P.S.
Die obigen FastMM4 Fehlermeldungen bekomme ich nur, wenn ich meinen Code in der Delphi6PE IDE laufen lasse. Jedes Dummyprojekt erzeugt in der Delphi6PE IDE dieselben Fehler. In der Delphi7PE IDE werden keine solchen Fehler ausgegeben. ???? |
Re: Memory Leak durch Thread?
Für solche aufeinanderfolgende Posts gibt es einen Editbutton, um nicht zu Pushen.
![]() Dann sind einige Speicherlecks "Absicht" und Andere ... wie hast du FastMM eingebunden? Die Unit muß als Allererste in der DPR eingetragen sein. |
Re: Memory Leak durch Thread?
Ok, werde künftig editieren.
Zitat:
Die Delphi6 Personal und Delphi7 Personal IDE verhalten sich definitiv unterschiedlich. P.S. Jetzt wirds noch besser: in D7 ist auch das Thread-Leck verschwunden. FastMM scheint aber zu funktionieren. Wenn ich das Programm beende, ohne das Thread-Object zu free-en, dann wird ein Speicherleck angezeigt, was ja auch Sinn macht. Trotzdem zeigt der Prozessspeicher mit jedem neuen Free-Create-Zyklus einen Prozessspeicherzuwachs. Muss mich das nun beunruhigen? Ich beabsichtige den Thread viele tausende Male neu zu starten. |
Re: Memory Leak durch Thread?
Wenn du die Anzeige im Taskmanager meinst, braucht dich das nicht zu beunruhigen. Der Speichermanager (hier FastMM) weis es besser ;)
Du brauchst übrigens deine dynamischen Variablen (Strings, Arrays) nicht auf Länge 0 setzen, dass passiert automatisch. |
Re: Memory Leak durch Thread?
Zitat:
Ich habe mal meinen Thread 2 Stunden lang alle Sekunde gestartet, wieder beendet und ge-"free"d und den Prozessspeicher dabei beobachtet. Der wuchs dabei eine Zeit lang in 12k Schritten um insgesamt ca. 700k. Danach stabilisierte der sich aber und wuchs nicht weiter. Man fragt sich dabei warum. FastMM hat beim Beenden des Programms kein Memoryleck gefunden. Mein Code ist also offenbar ok :-) Noch eine Frage: Ist es sinnvoll FastMM dauerhaft eingebunden zu lassen oder sollte man das am Ende der Programmentwicklung wieder rausschmeissen? Zitat:
|
Re: Memory Leak durch Thread?
FastMM versucht etwas zu optimieren,
dabei sucht er z.B. nicht ständig seinen ganzen Speicher nach 'nem freien Platz passender Größe ab, wenn irgendetwas Speicher haben will, sondern er sucht nur ab einer bestimmten Position (ab da wo zuletzt freier Speicher gefunden wurde). Wenn jetzt etwas freigegeben wird, dann entsteht vor dem gemerkten Positionszeiger eine Lücke, welche zwar in FastMM frei, aber dennoch bei Windows registirert ist. Nun wird aber erstmal danach gesucht, so daß einige Lücken entstehen, welche Dank der "Optimierung" eine Weile bestehen bleiben, bis irgendwann der Positionszeiger hier wieder vorbeikommt. > das ist jetzt alles nur "vereinfacht" ausgedrückt. Also die Suche ist so zwar schneller, aber er braucht etwas mehr Speicher, welchen du hier entdeckt hast. |
Re: Memory Leak durch Thread?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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