AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spring4D, Memory-Leaks, alte Version

Ein Thema von freimatz · begonnen am 14. Jun 2024 · letzter Beitrag vom 19. Jun 2024
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#1

Spring4D, Memory-Leaks, alte Version

  Alt 14. Jun 2024, 09:25
Hallo zusammen,
ich bin gerade in einem unit test am Bearbeiten von Memory-Leaks mit Hilfe von madExcept. Dabei kommen da etliche die sehen so ähnlich aus:
55f1e7d1 Spring.Base28.bpl Spring Valueconverters.TValueConverterFactory.RegisterCon verter
Ich schaute in die unit Spring.ValueConverters rein, verstand wie vermutet nicht allzuviel an der Stelle. Was ich dann aber verstand ist oben die Zeile:
Copyright (c) 2009-2018 Spring4D Team
Nun die Frage: sehe ich es richtig, dass es keinen Sinn macht hier weiter nach Memory-Leaks zu suchen sondern erst mal auf die neueste Version upzudaten? (Was in meinem Falle ein recht hoher Aufwand wäre.)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Spring4D, Memory-Leaks, alte Version

  Alt 14. Jun 2024, 09:51
Ich hatte neulich mit Schrecken festgestellt, dass unser Hauptprojekt auch noch auf Spring4D 1.1.4 (2016) basierte und dann auf 1.2.5 geupdatet (mittlerweile gibt es auch schon 1.2.6)

und das war natürlich schon ein bisschen Arbeit, aber eigentlich weniger wild als befürchtet, wenn ich mich richtig erinnere.


PS: Inwiefern sind das denn irgendwelche (Quasi-)Singletons, die halt einmal nur existieren (bzw. bei Bedarf das erste mal erstellt werden) und dann bis zum Ende der Anwendung einfach existieren, niemand räumt sie ab, und das wird halt als "Leak" erkannt, was aber eigentlich keiner ist...

Ich würde immer mit Unit-Tests versuchen das nachzustellen, wie es hier angeblich zum Speicherleck kommt.

PPS: Spring würde ich natürlich trotzdem irgendwann updaten.

Geändert von Der schöne Günther (14. Jun 2024 um 09:59 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Spring4D, Memory-Leaks, alte Version

  Alt 14. Jun 2024, 10:52
Danke Günther,
der grösste Aufwand an dem Update ist Kollegen zu überzeugen es zu machen oder mich zu lassen

Für mich - und auch madExcept - sind solche (Quasi-)Singletons auch Memory Leaks. Natürlich räumt Windows die weg, aber es wäre clean wenn die Anwendung das macht. Wenn die z.B. im initialization Teil erzeugt werden, dann gehören die im finalization Teil wieder weggeräumt.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Spring4D, Memory-Leaks, alte Version

  Alt 14. Jun 2024, 12:06
Kann man sich drüber streiten, ich bin habe da die Jahre über meine Meinung auch mehrmals geändert.

Lesenswert:
Zitat:
(...)The building is being demolished. Don’t bother sweeping the floor and emptying the trash cans and erasing the whiteboards. And don’t line up at the exit to the building so everybody can move their in/out magnet to out. All you’re doing is making the demolition team wait for you to finish these pointless housecleaning tasks.(...)
https://devblogs.microsoft.com/oldne...105-00/?p=8683



Um Speicher-Lecks durch Units-Tests aufzudecken habe ich für mich bis heute keine bessere Lösung gefunden, die Tests einfach 2 mal hintereinander laufen zu lassen 😏
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Spring4D, Memory-Leaks, alte Version

  Alt 17. Jun 2024, 18:08
Hallo, Danke für die Rückmeldung.
Solche Single-Memory-Leaks finde ich auch nicht so wichtig wie die anderen. Ich möchte die trotzdem weg haben
1. Damit es sauber ist. Der Vergleich mit dem Hausabriss: Zumindest hierzulande wird auch ein Haus auch erst geleert bevor es abgerissen wird und zuletzt noch Stahl und Beton getrennt
2. Dass man es sich angewöhnt Dinge aufzuräumen.
3. Es kann ja immer noch sein, dass man aus einem Singleton mit Memory-Leak ein nicht Singeton macht - und dann das Leak vergisst zu beheben.
4. Wenn man eine Liste von Memory-Leaks hat, übersieht man leicht den wichtigen Leak. Besser dann immer alle weg, dann fällt ein neues eher auf.
4. Der wichtigste Grund für mich: Bei zwei Leaks ist madExcept sehr schnell. Aber bei einem Beispiel mit 252 Leaks benötigt madExcept ca. 20 Minuten um diese zu filtern. Das ist ein Unit-Test. Bei den Leaks im Hauptprogramm will ich es gar nicht abwarten.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Spring4D, Memory-Leaks, alte Version

  Alt 19. Jun 2024, 02:04
Wenn madExcept in dieser Unit Memory leaks reportet, dann liegt madExcept falsch.
Ein Blick in den class destructor, den es auch schon 2017 gab, zeigt, dass dort die internen dictionaries freigegeben und somit alle registrierten Converter freigegeben werden.

Ich mag madExcept aber dessen memory leak reporting hab ich bisher zugunsten von FastMM und LeakCheck (letztes speziell für Unittests) nicht angefasst.
Ich vermute mal, dass der Mechanismus, der die noch existierenden Allokierungen checkt, einfach zu früh läuft.

(mittlerweile gibt es auch schon 1.2.6 2.0.1)
fixed
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Jun 2024 um 02:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Spring4D, Memory-Leaks, alte Version

  Alt 19. Jun 2024, 06:30
Kann man bei madExcept nicht auch bekannte Memory Leaks registrieren? Solange man weiß, dass es sich um Leaks handelt, die keiner Behandlung bedürfen, wäre das die einfachste Lösung.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Spring4D, Memory-Leaks, alte Version

  Alt 19. Jun 2024, 15:18
@jaenicke: ja kann man. Dazu muss man aber sicher das Leak angeben, also muss man an den Speicher rankommen.

Wenn madExcept in dieser Unit Memory leaks reportet, dann liegt madExcept falsch.
Ein Blick in den class destructor, den es auch schon 2017 gab, zeigt, dass dort die internen dictionaries freigegeben und somit alle registrierten Converter freigegeben werden.
Ich gehe nach wie vor davon aus, dass madExcept richtig liegt.
Bei einem anderen Projekt habe ich die Info, dass (min.) ein Package beim Ende nicht entladen wird. Dann kommt auch der class destructor nicht zum Zug. Und dann hat die Suche nach Leaks so keinen Sinn.
Ob das bei dem Projekt von obigem Beispiel auch so ist, müsste ich noch prüfen.
Danke für alle Hinweise.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 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