![]() |
AW: Wieso Speicheranforderung in Try...Finally ?
Zitat:
|
AW: Wieso Speicheranforderung in Try...Finally ?
Aus Höflichkeit ;)
|
AW: Wieso Speicheranforderung in Try...Finally ?
Hi Luckie,
finde ich gut, dass wir uns zumindest einig sind, dass das try-finally keine Fehlerbehandlung ist. Manchmal entstand für mich beim Lesen der Threads der Eindruck, als würde das so gesehen, deswegen hatte ich es einfach mal so klar geschrieben. Zitat:
Daher meine ich ja, dass ein try-finally das Ganze schon etwas "weniger schlimm" macht, aber wirklich stabil macht es das Programm nicht. Insofern finde ich halt, dass man nicht immer alles zwanghaft mit try-finally umklammern muss, aber andererseits dann da, wo etwas schiefgehen kann, die Exception auch wirklich mit try-except behandelt. Damit möchte ich auch niemandem ein try-finally komplett ausreden. Ich sehe ja schon, dass ein Problem damit vielleicht weniger schlimm werden kann. Aber manchmal wirkt es halt so, als sei alles andere schlechter Stil, und das finde ich eben nicht. |
AW: Wieso Speicheranforderung in Try...Finally ?
Manchmal entstand aber andersherum der Eindruck, als sei es völlig unnötig, einen Ressourcenschutzblock zu verwenden. Wenn man sich aber daran gewöhnt, die Dinger immer zu benutzen, dann hat man sichergestellt, dass der reservierte Speicher auch garantiert wieder freigegeben wird (außer in extremen Härte-Situationen wie BSODs, aber dann ist ein Speicherleck wohl die kleinste Sorge), egal was zwischen try und finally steht oder aufgerufen wird. Das und nur das ist deren Sinn.
|
AW: Wieso Speicheranforderung in Try...Finally ?
Zitat:
Letztlich ist es doch eine Frage der Gewohnheit, wie man programmiert. Wenn du eh immer ein try-finally drumrum hast, dann bist du es auch nicht groß gewohnt, diesen bei einem eingefügten raise zu ergänzen, denn er ist ja schon da. Bei mir wäre es halt genau andersrum... Bis denn Bommel ...der jetzt aber doch mal schnell guckt, ob er nicht irgendwo bei einem raise ein finally vergessen hat. Ahem. :-D |
AW: Wieso Speicheranforderung in Try...Finally ?
Man braucht nichtmal ein Re-Raise ... es braucht ja nur in dem ShowMessage (oder was auch immer dort steht) etwas passieren.
|
AW: Wieso Speicheranforderung in Try...Finally ?
Zitat:
Insbesondere weil du auch gar nicht unbedingt weißt, wo in fremdem Code, auch z.B. in Drittanbieterbibliotheken, Exceptions auftreten können. Genauso weißt du aber nicht unbedingt, dass irgendwo so eine benutzt wird. Deshalb ist es sinnvoller dies von vornherein abzusichern, dann braucht man sich nur um eine ordentliche Fehlerbehandlung weiter außen zu kümmern. Eben dort wo es Sinn macht. Dort wiederum kann man sich darauf verlassen, dass der Speicher der Unteraufrufe aufgeräumt ist und man "nur" einen definierten Programmzustand wiederherstellen muss. Und wenn einer der anderen Entwickler irgendwo in einem Aufruf eine Bibliothek nutzt, die vorher nicht da war und die plötzlich eine Exception wirft, dann wird die zwar vom Exceptionhandler weiter oben abgefangen, aber da in dem restlichen Code die try..finally Blöcke nicht ergänzt wurden, der Speicher nicht freigegeben. Das sind alles Unsicherheitsfaktoren, die man sich im professionellen Umfeld einfach nicht leisten kann. Code sollte so robust geschrieben sein, dass Änderungen an anderer Stelle nicht plötzlich Speicherlecks (oder Schlimmeres) aufreißen können (soweit eben möglich). |
AW: Wieso Speicheranforderung in Try...Finally ?
Zitat:
Oder einen Codeschnippsel zur Erklärung irgendwo hin poste. Oder wenn ich in einem Buttonclick irgend eine Funktion ausführe und dafür mal eben ein Objekt brauche. Oder wenn ich an der Stelle eh nicht weitermachen kann. Ich verwende Try-Finally genau dann (und nur dann), wenn ich einen Resourcen schützen möchte bzw. wenn ich die Exception abfangen muss. Ich wiederhole mich: Ich kenne keine Speicherlecks in meinen Programmen. Es mag sie geben, aber FastMM zeigt sie mir nicht. Wozu dann also Try-Finally an den Stellen, an denen es überflüssig ist? Mir scheint, die Diskussion ist am Ende, denn es gibt immer nur wieder Argumente, warum Try-Finally in bestimmten Situationen notwendig, korrekt, hilfreich oder essentiell ist. Nur ist das nicht das bzw. mein Thema. Ich programmierer weiss gott lange genug, um mir über die Feinheiten von Try-Finally im Klaren zu sein. Gerade deshalb will ich überflüssigen Schnickschnack vermeiden. Zitat:
Object.Free ist minimalistisch bzw. FreeAndNil dann, wenn es unbedingt notwendig ist. Zitat:
Zitat:
Aber gut. Der eine knallt seinen Code mit Try-Finally voll, der andere programmiert vielleicht so, das er es nur dann einsetzt, wenn es auch sinnvoll ist. Jedem das Seine. ------- Ich setz mich jetzt übrigens in die Ecke und schmolle ganz fürchterlich, weil ihr mich nicht verstehen wollt. Oder weil wir einfach aneinander vorbeireden. :freak: |
AW: Wieso Speicheranforderung in Try...Finally ?
Zitat:
Zitat:
Wenn aber ein Programm auf vielen hundert Rechnern im Einsatz ist, lassen sich eben unvorhersehbare Probleme nicht verhindern. Schon durch äußere Einflüsse, die durch Hardwareschnittstellen usw. kommen. Und in großen Programmen ist da nichts mit schnell gefunden, selbst mit Stacktraces und Logs sucht man nach der eigentlichen Ursache durchaus auch mal länger. Kein Programm ist fehlerfrei, da kommt es eben auch mal zu Exceptions, wie man ja an diversen größeren Programmen sieht, egal ob Delphi, Eclipse, Lazarus, ... da kommen eben auch mal unbehandelte Exceptions. Nur deshalb kann man eben trotzdem in der Regel weiterarbeiten. Was wäre, wenn man jetzt nur deshalb immer wieder das Programm schließen müsste, weil bei den Fehlern der Speicher vollläuft?!? Oder willst du behaupten, dass diese Exceptions alle leicht vorhersehbar gewesen wären und die Entwickler diese aus Spaß nicht behandelt haben? Du stellst dir das glaube ich alles zu einfach vor bzw. auf kleinere Programme bezogen... |
AW: Wieso Speicheranforderung in Try...Finally ?
Hallo,
Zitat:
Ein weiterer Punkt dabei ist, dass es meist erst im Echtbetrieb festgestellt wird, weil der Rechner auf dem das Programm läuft eine ganz andere Hardware hat, als der Entwicklungsrechner. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 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