Official guidance legt nahe, dass es nicht notwendig ist, diesen Strom zu entsorgen, da sie entsorgt werden, wenn der Anforderungsverarbeitung endet:
Server-Ressourcen, die die hochgeladene Datei zugeordnet puffern zerstört werden, wenn die Anforderung endet. Verwenden Sie die SaveAs-Methode, um eine dauerhafte Kopie der Datei zu speichern.
Um dies zu untermauern Ich habe auch ein wenig Code durch die Quellen graben. Es stellt sich heraus, dass weder FileUpload
noch HttpPostedFile
für die Entsorgung dieses Streams verantwortlich sind. Tatsächlich enthalten sie selbst keine Ressourcen und stellen nur eine Schnittstelle bereit, um auf Teile der Anfrage zuzugreifen.
HttpRequest
tut etwas entsorgung. Aber nicht alle Einwegobjekte werden entsorgt. Hier ist sein Dispose
:
/*
* Cleanup code
*/
internal void Dispose() {
if (_serverVariables != null)
_serverVariables.Dispose(); // disconnect from request
if (_rawContent != null)
_rawContent.Dispose(); // remove temp file with uploaded content
}
Was jedoch nicht angeordnet ist, ist die Sammlung HttpRequest.Files
, die der Upload-Steuerelemente Schnittstelle. Um diese Sammlung mit Daten zu füllen, wird jede veröffentlichte Datei in ein HttpPostedFile
-Objekt eingeschlossen und für jede wird eine HttpInputStream
erstellt. Dieses Stream-Objekt enthält den Verweis auf die gesamten Daten (siehe rawContent
oben) und kennt Offset und Länge des relevanten Dateiteils. Es ist erwähnenswert, dass HttpInputStream
IDisposable
implementiert, jedoch konnte ich den Code nicht finden, der diese Streamobjekte disponiert.
Um es zusammenzufassen:
- Hochladen Kontrollen verfügen nicht den Stream
- anfordern oder Httpcontext verfügen nicht den Strom entweder
- Jedoch Anfrage die zugrunde liegenden Daten
verfügt Es sieht so aus, als ob die Idee darin besteht, dass Verweise auf die relevanten Daten fallengelassen werden, wenn die Anfrageverarbeitung abgeschlossen ist, und sie wird entsorgt. Es wird also nicht schaden, den verwendeten Stream manuell zu löschen, aber es ist auch nicht notwendig.