12 Stimmen

Ist es sicher, den C#-Filestream über längere Zeiträume geöffnet zu lassen?

In meinem Webdienst öffne ich einen FileStream zu einer Datei auf der lokalen Festplatte. Ich halte diesen für die Lebensdauer des Dienstes offen. Für jede Abfrage, die eingeht, verwende ich den FileStream, um die Festplatte zu lesen. Ich mache das, um zu vermeiden, den FileStream bei jeder Abfrage neu öffnen zu müssen. Die Latenz dieses Pfades ist entscheidend (sollte weniger als wenige Millisekunden betragen). Ich verwende eine SSD, um die Festplatten-E/A-Zeit auf 0,1ms oder weniger zu halten.

Kann der FileStream über lange Zeiträume (Tage) hinweg "schlecht" werden (ungültig werden). Ist es sicherer, den FileStream bei jeder Abfrage einfach neu zu öffnen? Wenn ich ihn neu öffnen muss, was ist der Overhead, wenn ich den FileStream mehrmals pro Sekunde ständig neu öffne?

8voto

Alexei Levenkov Punkte 96742

Es ist sicher, Dateien so lange geöffnet zu lassen, wie du sie benötigst.

Ob es gut für deinen Fall ist oder nicht, musst du selbst entscheiden. Das erneute Öffnen einer Datei sollte nicht langsam sein (auch nicht auf einem regulären Laufwerk), aber du musst es selbst ausprobieren und messen, da nur du deine genauen Leistungsziele kennst.

6voto

Mike Perrenoud Punkte 64649

Die einzige Sorge, die ich hätte, wenn die Datei offen bleibt, ist, wenn die Anwendung aus irgendeinem Grund fehlschlägt und nicht von ihrer aktuellen Position aus wiederherstellen kann, um den Stream zu schließen; der CreateFile Einstiegspunkt in KERNEL32, der verwendet wird, um die Datei zu öffnen, macht die folgende Aussage:

Wenn eine Anwendung das Objekt-Handle, das von CreateFile zurückgegeben wird, nicht mehr benötigt, verwenden Sie die CloseHandle-Funktion, um das Handle zu schließen. Dadurch werden nicht nur Systemressourcen freigegeben, sondern es kann auch einen breiteren Einfluss auf Dinge wie das Freigeben der Datei oder des Geräts und das Schreiben von Daten auf die Festplatte haben. Einzelheiten sind in diesem Thema gegebenenfalls zu beachten.

Also denke ich, dass es viel angemessener ist, den FileStream jedes Mal zu öffnen und zu schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X