@ Fooberichu Antwort genau das Richtige ist, aber ich denke, es ist auch wert darauf hin, dass normalerweise müssen nur ein paar Dinge explizit entsorgt werden.
Objekte werden immer effektiv bei etwas Punkt angeordnet:
- Jedes Mal, wenn der GC eine Sammlung der Fall ist, wird es (eventuell) verfügen über Objekte, die nicht mehr referenziert werden. Wenn Sie also nicht manuell disponieren, wird das Objekt möglicherweise noch innerhalb weniger Sekunden nach Verlassen des Bereichs entsorgt.
- Wenn Ihre Anwendung beendet wird, werden alle Ressourcen freigegeben. (Obwohl die Objekte nicht von C#/.net entsorgt werden können, beansprucht das Betriebssystem so ziemlich alles zurück, was Ihr Prozess ergriff.Wenn die Lebensdauer der Ressource über Ihre Anwendung erstreckt, dann ist das Betriebssystem in der Regel verantwortlich für die Reinigung it up)
Der Punkt, der manuell Entsorgung (oder unter Verwendung eines ‚mit‘) ist daher nicht, um sicherzustellen, dass die Ressourcen wird freigegeben werden, aber zu veröffentlichen Sie so früh wie möglich.
Heutzutage ist es unwahrscheinlich, dass Ihnen die meisten Ressourcentypen ausgehen (z. B. Speicher, Dateihandles oder Systempinsel). Wenn Sie jedoch an Ressourcen festhalten, die Sie nicht benötigen, ist Ihr Programm wahrscheinlich weniger effizient, Sie verwenden möglicherweise mehr Speicher als erforderlich oder verursachen möglicherweise Verzögerungen, indem Sie andere Anwendungen vorübergehend daran hindern, nützliche Dinge zu tun Im Allgemeinen geht es bei Disposing also um gute Etikette, Ordnung und unnötige Ineffizienzen.
Es gibt einige Fälle, in denen Ressourcen muss freigegeben werden (zB wenn Sie nicht über eine Datei schließen, können Sie nicht öffnen/umbenennen/verschieben/löschen es von einer anderen Stelle im Programm oder andere Programme, wenn Sie Wenn Sie Texturen auf Ihrer Grafikkarte zuweisen, ohne sie zu veröffentlichen, haben Sie keinen VRAM mehr und die Anzeige des Computers wird fehlschlagen. Im Allgemeinen werden Sie jedoch selten auf diese Situationen stoßen und wenn Sie Best Practices befolgen Sie werden normalerweise nicht mehr wissen müssen, wann diese Situationen auftreten, weil Sie sie bereits korrekt behandeln.
Das Problem ist, dass ich das Objekt Leben in dieser Situation nicht vollständig verstehe. Wenn ich (Process.Start (url)) verwende; Dann wird es an diesem Punkt warten? Oder wird es den Prozess zu früh entsorgen? Im Moment macht das keinen Unterschied im Verhalten, daher bin ich der Meinung, dass es keine Ressourcen gibt, die offen gehalten werden, aber ich weiß es nicht genau und ich weiß nicht, wie ich das messen soll. –
Da die "using" -Klausel den Compiler implizit anweist, einen try/finally zu erstellen und eine dispose zu implementieren und die Tatsache, dass sie ein IDisposable-Objekt zurückgeben, denke ich, dass Sie das sicher tun könnten. Wenn Sie es nicht freigeben, binden Sie möglicherweise Ressourcen. Sie könnten versuchen, eine Schleife zu erstellen, die mehrere URLs öffnet, ohne sie zu beseitigen und zu sehen, ob Ihre Ressourcen außer Kontrolle geraten, und einen weiteren Test, indem Sie sie in Klauseln einbetten. Der Vorbehalt ist, dass Sie eine Reihe von Fenstern haben, um danach zu schließen. :) – Fooberichu