Es ist völlig synchron, wie Sie sehen können, wenn Sie die Implementierung von HttpResponse.WriteFile
mit Lutz Reflector betrachten. Sie können die Datei sofort nach dem Aufruf von Response.WriteFile
löschen.
Sie haben nicht die Garantie, dass der Antwortstream vollständig an den Client übertragen wurde, aber der Aufruf von Response.Flush
gibt Ihnen auch keine Garantie. Daher muss ich Response.Flush
nicht vor dem Löschen der Datei aufrufen.
Vermeiden Sie es, die Datei in MemoryStream
zu laden, das bringt Ihnen keinen Vorteil und verursacht Kosten für die Speichernutzung, insbesondere bei großen Dateien.
Wenn Sie eine Datei mit Response.WriteFile()
auf den Client schreiben, wird durch einen Aufruf von Response.Flush()
sichergestellt, dass sie vollständig an den Client ausgegeben wurde. Sobald dies erledigt ist, können Sie es vom Webserver löschen.
Sie sollten ein robusteres System entwickeln, wenn die Datei geschäftskritisch ist. Angenommen, ein clientseitiges Skript überprüft, ob die Datei erfolgreich empfangen wurde, und warnt den Webserver, dass die Datei gelöscht werden kann.
Wenn der Speicher bedient wird, ist er synchron, wie auch der Rest der RESPONSE-Befehle.
Übertragungsdatei
Sie können TransmitFile auch aufrufen, damit IIS sich darum kümmert. Es wird tatsächlich von IIS außerhalb Ihrer Arbeitsprozesse gesendet.
Speicherstream
Wenn Sie wirklich paranoid sind, senden Sie die Datei nicht. Laden Sie es in einen Speicher-Stream (wenn die Größe vernünftig ist) und übertragen Sie das. Dann können Sie die Datei jederzeit löschen. Die Datei auf der Festplatte wird niemals von IIS berührt.
Tags und Links asp.net