Schließen die Ressourcen immer wichtig?

9

Oft habe ich die Aussage getroffen, dass die Anwendung immer alle geöffneten Ressourcen explizit schließen soll.

Mein Ansatz für die Programmierung ist eher pragmatisch, und ich mag es nicht, blind irgendeiner Konvention zu folgen, von der ich nicht eindeutig Vorteile sehe. Daher meine Frage.

Nehmen wir an:

  1. Ich habe eine kleine Anwendung
  2. Es öffnet ein paar Ressourcen (z. B. Dateien, Datenbankverbindungen, Remote-Streams) und verarbeitet sie
  3. Es funktioniert ein paar Minuten und dann wird
  4. beendet
  5. Sagen wir, es ist in Java (wenn die Sprache relevant ist)

Muss ich wirklich darauf achten, alle Ressourcen, die ich geöffnet habe, zu schließen? Ich denke, alle Ressourcen, die ich geöffnet habe, werden geschlossen / freigegeben, wenn die Anwendung / virtuelle Maschine beendet wird. Habe ich Recht?

Wenn das stimmt, gibt es irgendwelche überzeugenden Gründe, sich darum zu kümmern, Ressourcen in solch einer kleinen, kurzen Arbeitsanwendung zu schließen?

UPDATE:

Die Frage ist rein hypothetisch, aber das Argument dafür nicht ist, dass ich vielleicht nur ein kurzes Skript hacke und keinen unnötigen Code schreiben will, der nicht direkt mit der Problem zur Hand: Ressourcen schließen, all diese ausführlichen try-catch-finally-Sachen machen, mit Ausnahmen umgehen, die mir egal sind usw.

Der Punkt der Frage ist, ob es irgendwelche praktischen Konsequenzen gibt, dies nicht zu tun.

    
Piotr Sobczyk 01.08.2013, 19:29
quelle

3 Antworten

9
  

Ich schätze, alle Ressourcen, die ich geöffnet habe, werden geschlossen / freigegeben, wenn die Anwendung / virtuelle Maschine beendet wird.

Was mit einer Ressource passiert, die nicht regelmäßig freigegeben wurde, liegt außerhalb Ihrer Kontrolle. Es kann nicht schaden, oder es kann etwas tun. Es ist auch sehr plattformabhängig, so dass das Testen auf nur einem nicht helfen wird.

  

Warum sollte ich mich darum kümmern, diese Ressourcen in einer so kleinen, kurzen Arbeitsanwendung zu schließen?

Die Größe der Anwendung sollte keine Rolle spielen. Erstens wachsen Anwendungen normalerweise; Zweitens, wenn du es nicht richtig machst, wirst du nicht wissen, wie es geht, wenn es darauf ankommt.

    
Marko Topolnik 01.08.2013, 19:36
quelle
5

Wenn Sie die Ressourcen nicht schließen, kann dies dazu führen, dass Anwendungsserver häufig bei Erschöpfung der Ressourcen neu gestartet werden, weil Betriebssysteme und Server dies verursachen Anwendungen haben im Allgemeinen eine Obergrenze für Ressourcen

Laut Dokumenten

  

Die typische Java-Anwendung manipuliert mehrere Arten von Ressourcen wie z   Dateien, Streams, Sockets und Datenbankverbindungen. Solche Ressourcen müssen sein   mit großer Sorgfalt behandelt, weil sie Systemressourcen für ihre erwerben   Daher müssen Sie sicherstellen, dass sie auch bei Fehlern frei werden.

  

In der Tat ist eine falsche Ressourcenverwaltung eine häufige Quelle für Fehler in   Produktionsanwendungen, mit den üblichen Fallstricken Datenbankverbindungen   und Dateideskriptoren bleiben geöffnet, nachdem eine Ausnahme aufgetreten ist   woanders im Code. Dies führt dazu, dass Anwendungsserver häufig sind   Neustart bei Erschöpfung der Ressourcen, weil Betriebssysteme und Server   Anwendungen haben im Allgemeinen eine Obergrenze für Ressourcen.   

try-with-resources Statement, das in Java 7 für die Programmierer eingeführt wurde, die es hassen enge Aussagen.

    
Prabhaker 01.08.2013 19:45
quelle
2

Kurze Antwort - Ja. Zum einen ist es eine schreckliche Programmierung, wie es in jedem anderen Bereich des Lebens ist, um nicht nach sich selbst aufzuräumen. Zum anderen können Sie nicht vorhersagen, ob das Betriebssystem erkennt, dass die Java-Umgebung die Ressourcen nicht mehr benötigt, und Sie könnten Sperren für Dateien / etc erhalten, die ohne einen erzwungenen Neustart nicht freigegeben werden können.

>

Bereinige immer die Ressourcen, die du öffnest!

Update in Bezug auf Ihr Update auf die ursprüngliche Frage - es dauert 5 Sekunden, um einen try / catch-Block hinzuzufügen, um alle offenen Ressourcen zu schließen, und kann verhindern, dass Sie 5 Minuten damit verbringen, Ihren Computer neu zu starten. Wenn Sie es richtig machen, sparen Sie am Ende immer Zeit. Mein Vater hat mir immer gesagt, dass die wahre faule Person beim ersten Mal alles richtig macht, damit sie nicht wiederkommen und es wieder tun müssen. Ich sage nur, sei nicht faul und mach es richtig. Die 5 Sekunden, die man braucht, um einen catch-Block zu schreiben, werden den Schreibprozess nie erheblich verlangsamen ... die 5 Sekunden, die du speicherst, indem du sie nicht schreibst, könnten dein Debugging immens verlangsamen.

    
StormeHawke 01.08.2013 19:38
quelle

Tags und Links