In C # wird die using
Anweisung verwendet, um die Ressourcen deterministisch zu entsorgen, ohne auf den Garbage Collector zu warten. Zum Beispiel kann es verwendet werden, um:
Entsorgen Sie SQL-Befehle oder -Verbindungen.
Schließen Sie Streams und geben Sie die zugrunde liegende Quelle wie eine Datei frei.
Kostenlose GDI + Elemente,
etc.
Mir ist aufgefallen, dass dies using
immer häufiger in Fällen verwendet wird, in denen nichts zu entsorgen ist, der Anrufer jedoch nur bequemer einen using
Block als zwei separate Befehle schreiben kann .
Beispiele:
MiniProfiler , geschrieben vom Stack Overflow-Team,
using
bezeichnet Blöcke im Profil:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
Ein alternativer Ansatz wäre, zwei Blöcke zu haben:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
Ein anderer Ansatz wäre die Verwendung von Aktionen:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
ASP.NET MVC hat auch folgende
using
Formulare ausgewählt:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
Ist eine solche Verwendung angemessen? Wie kann man das rechtfertigen, da es mehrere Nachteile gibt:
Anfänger wären verloren, da eine solche Verwendung nicht der entspricht, die in Büchern und Sprachspezifikationen erklärt wird.
Der Code sollte ausdrucksstark sein. Hier leidet die Ausdruckskraft, da die angemessene Verwendung von darin
using
besteht, zu zeigen, dass sich dahinter eine Ressource wie ein Stream, eine Netzwerkverbindung oder eine Datenbank befindet, die freigegeben werden sollte, ohne auf den Garbage Collector zu warten.
using
: Die letztere Anweisung (z. B.profiler.Stop(p)
) kann angesichts von Ausnahmen und Kontrollabläufen nicht garantiert ausgeführt werden.