![]() |
Aufräumarbeiten bei Anwendungsende
Ein neues Feature in einer Delphi-Anwendung sorgt dafür dass die Anwendung zum Beenden mindestens fünf Sekunden benötigt, in seltenen Extremfällen auch mal gerne 30 Sekunden.
Die Anwendung räumt beim Ende akribisch auf. Speicher wird freigegeben, zum lesen geöffnete Dateien geschlossen, Netzwerkverbindungen zugemacht. Ja, ein paar Dinge sind beim Beenden unverzichtbar. Aber wirklich nur ein paar. Haben wir das falsch gemacht, war das unnötig? Legende Raymond Chen meint Ja. Zitat:
![]() ( ![]() Gibt es Meinungen aus der Delphi-Praxis hierzu? Wie macht ihr es? Ich spiele schon mit dem Gedanken die Anwendung umzubauen dass bei Ende nur das Allernötigste getan wird und sich dann selbst mit
Delphi-Quellcode:
abgeschossen wird...
ExitProcess(..)
|
AW: Aufräumarbeiten bei Anwendungsende
Ich denke, das ist eine Frage der persönlichen Einstellung. Beim Destroy einer Klasse weiß ich in der Regel nicht, ob lediglich die Instanz freigegeben wird oder das Programm beendet. Ebensowenig weiß ich, was um mich herum gerade passiert. Ich finde, jeder sollte den Platz so verlassen, wie er ihn vorgefunden hat. Womöglich verlässt sich ja auch jemand darauf, daß ich das tue. Ehrlich gesagt, wäre es mir auch zu viel Aufwand, jedesmal zu überprüfen ob ich jetzt aufräumen muss oder das auch entfallen kann. Daher bin ich hier auch auf der Seite der ordentlich Aufräumer und teile bewusst nicht die Ansicht von Raymond (was zugegeben nicht oft vorkommt, aber der programmiert vermutlich auch nicht in Delphi). Vielleicht schreibe ich auch einfach keine Programme, die merkbar lange zum Beenden brauchen.
|
AW: Aufräumarbeiten bei Anwendungsende
Zitat:
Kleiner Tipp aus meinem Erfahrungsschatz (sprich ist mir schon mal passiert): Einfach mal einen Profiler (ProDelphi, AQ Time) laufen lassen und schauen WAS wirklich ZEit braucht, da kannst Du dann versuchen zu optimieren. |
AW: Aufräumarbeiten bei Anwendungsende
In Ergänzung zu meinen Vorschreibern:
Zitat:
|
AW: Aufräumarbeiten bei Anwendungsende
Danke für die Antworten bislang!
Zitat:
Zitat:
Zitat:
In einer anderen Anwendung tun wir genau das: WENN Sie endet:
Dieser Teil muss natürlich gemacht werden und ist ganz spezifisch für die einzelne Anwendung. Ich fand das ziemlich sinnvoll. Im konkreten Fall weiß ich auch was so lange braucht. Es wäre ein irrsinniger Aufwand das so umzubauen dass es sich jederzeit abbrechen ließe. Und es macht, wie der gute Raymond sagt, auch keine Sinn. Niemand interessiert sich mehr für das Ergebnis. |
AW: Aufräumarbeiten bei Anwendungsende
Es gibt guten einen Grund, um immer aufzuräumen.
Wenn du am Ende noch einen Speicherlecktest ausführen willst. Das geht ja nur, wenn auch vorher alles aufgeräumt wurde, denn nur dann siehst du auch, was davon wirklich die Lecks sind. (alles, was dann noch da ist, und was nicht "absichtlich" unfreigegeben blieb ![]() |
AW: Aufräumarbeiten bei Anwendungsende
Halte es auch für guten Stil am Ende aufzuräumen. In der Regel passiert das doch eh "automatisch", wenn die letzte Klasse freigegeben wurde. Sollte es zumindest, wenn die Klassen selbst im Destructor für Ordnung sorgen.
|
AW: Aufräumarbeiten bei Anwendungsende
Vielleicht beeindruckt mich auch nur Raymond Chens anschauliches Beispiel so sehr. Ich meine, er hat ja nicht Unrecht. Welchen Sinn macht es, akribisch jedes Byte freizugeben wenn die Anwendung sowieso nicht mehr gebraucht wird?
Speicherleck-Tests sind ein guter Grund, aber das versuche ich mittlerweile eher über die Unit-Tests zu machen. Dass die Anwendung am Schluss freundlich alle Verbindungen zumacht und Tschüss sagt, da hat der Benutzer auch nichts von (außer Wartezeit). Hmm… Ich hätte erwartet mehr Zuspruch zu bekommen 🤔 |
AW: Aufräumarbeiten bei Anwendungsende
Zitat:
|
AW: Aufräumarbeiten bei Anwendungsende
Ich kann mich dem nur Anschließen, mit übermäßiger Wartezeit beim Programmende hatte ich nur selten zu kämpfen. Mit Programmen die am Ende Daten leaken habe ich aber noch nie positive Erfahrungen gemacht (allein deshalb ist meiner Meinung nach, beim Programmende alles korrekt freizugeben).
Ob sich bei einem Stromausfall oder Crash das Betriebssystem nun wirklich um alles kümmert spielt daher für mich kaum eine Rolle und aus meiner Erfahrung würde ich sage: "Mal so mal so" 8-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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