2009-07-24 8 views
10

Wenn Sie eine hochgeladene Datei in ASP.NET erhalten, tun Sie dies in der Regel über ein HttpPostedFile Objekt. Die empfangenen Daten werden über HttpPostedFile.InputStream zur Verfügung gestellt. Dies ist eine Eigenschaft, die zu der Annahme führen kann, dass ich sie nicht selbst entsorgen muss. In der Dokumentation wird jedoch nicht erwähnt, wer für die Entsorgung des Streams zuständig ist. Wenn dies durch das ASP.NET-Framework geschieht, geben Sie als an es tut es (sagen wir, kann ich den Stream in der Sitzung speichern, sollte ich es wünschen?).Wer ist verantwortlich für die Entsorgung von HttpPostedFile.InputStream - und wann?

Jetzt bekomme ich nicht so viele Dateien, und ich habe keine Probleme für die Entsorgung dieses bestimmten Streams, aber für die Sauberkeit - weiß jemand, was der Design-Vertrag hier ist?

Antwort

7

Aus meiner Erfahrung mit der Arbeit würde ich sagen, dass es veröffentlicht wird, sobald die Anfrage Verarbeitung abgeschlossen ist. Ein Beispiel ist, wenn ich einen Ball in die Luft werfen würde. Wenn ich es nicht erwische und es auf den Boden fällt ... wird es entsorgt. Wenn ich es fange und etwas damit mache ... und es dann fallen lasse, wird es entsorgt. Es bleibt Ihnen nicht erspart, bei der nächsten Anfrage mitzuspielen!

Das Problem ansprechen, es in der Sitzung zu speichern, würde ich NOOOOOO sagen! Wenn Sie es für eine Weile brauchen, schreiben Sie es in das Dateisystem. Wenn Sie es wieder benötigen, stellen Sie es als Stream wieder her und spielen Sie damit. Speichern eines Datei-Streams in der Sitzung (als Byte-Array möglicherweise?) Klingt wie eine große Verschwendung von Ihrer Sitzung (Speicher) Ressourcen.

+0

Zugegeben, das Speichern der Sache in der Sitzung klingt wie eine schlechte Idee; Ich habe lediglich versucht, ein Beispiel zu finden, wo es relevant wäre, die genaue Lebensdauer des Stroms zu kennen. Vielleicht wäre ein besseres Beispiel, einen Hintergrundarbeiter zu starten, um das Bild zu verarbeiten und zu speichern und mit dem Webrequest im Vordergrund fortzufahren - die Webanfrage könnte vor dem Worker abgeschlossen sein, also müssten Sie wissen, wann der Stream genau ungültig wird. In jedem Fall, ich nehme an, Sie haben Recht - obwohl ich bessere Dokumente von Microsoft geschätzt hätte (wie bei so vielen IDisposable-Problemen). –

+0

Auch wenn Sie es an einen Hintergrundprozess übergeben möchten ... was großartig ist ... Ich würde die Datei immer noch im Dateisystem speichern und einen Verweis auf die Datei an Ihren Hintergrund-Thread übergeben, anstatt die Instanz zu übergeben des Stroms. –

+0

Angesichts der Tatsache, dass der InputStream außerhalb meiner Kontrolle geschlossen ist, werde ich sicherlich so etwas tun - aber im Allgemeinen, um Engpässe zu vermeiden, bevorzuge ich temporäre Festplattenzugriffe zu vermeiden - und ein temporäres, wenn auch großes Byte-Array ist kein Problem. Danke für die Info, jedenfalls! –

Verwandte Themen