Ich bin es gewohnt, die Anweisung 'using' in Verbindung mit MemoryStreams zu verwenden. Ist dies ein Szenario, in dem die 'using' Aussage nicht notwendig ist? Oder ist es zulässig, die Rückgabe innerhalb einer using-Anweisung aufzurufen?
BEARBEITEN:
Für meine Zwecke habe ich festgestellt, dass die Einführung einer 'using'-Anweisung NICHT funktioniert (löst eine ObjectDisposedException aus). Hier ist, was ich mit ihm clientseitig mache:
%Vor%Wird ein MemoryStream automatisch entsorgt, wenn er als ActionResult zurückgegeben wird?
Ja, MVC (mindestens Version 3) wird es für Sie aufräumen. Sie können eine Quelle der Methode WriteFile
verwenden in FileStreamResult
:
Die Zeile using (FileStream) {
platziert den Stream in einen using-Block und disponiert ihn daher, wenn er den Inhalt in die HTTP-Antwort geschrieben hat.
Sie können dieses Verhalten auch überprüfen, indem Sie einen Dummy-Stream erstellen, der dies tut:
%Vor%Also MVC wird es entsorgen.
Sean: Benutze NICHT 'using', da es das Objekt entsorgen wird. Verlassen von MVC Zugriff auf ein Disposed-Objekt. Daher ist die Ausnahme (Serverfehler), die Sie erlebt haben, sicherlich eine ObjectDisposedException. Die WriteFile-Funktion, die zuvor gepostet wurde, stellt das Objekt für Sie bereit.
Der folgende Code ist gültig und entsorgt den Stream. Wenn sie in einem using
-Block eingeschlossen ist, wird die MemoryStream.Dispose()
-Methode automatisch beim Zurückgeben aufgerufen.
Sie können dasselbe Ergebnis erzielen, indem Sie das Objekt in einen try
-Block setzen und dann Dispose
in einem finally-Block aufrufen. Gemäß der MSDN-Dokumentation wird die using-Anweisung vom Compiler übersetzt. Und in einem try..finally
-Block wird der finally
immer ausgeführt, auch wenn try
durch return
endet.
Der Compiler übersetzt den using
-Block in folgendes:
Tags und Links asp.net-mvc c# jquery using memorystream