So erstellen Sie schnelle und effiziente Filestream-Schreibvorgänge für große Sparse-Dateien

8

Ich habe eine Anwendung, die große Dateien in mehrere Segmente schreibt. Ich benutze FileStream.Seek, um jedes Wirte zu positionieren. Es scheint, dass, wenn ich FileStream.Write an einer tiefen Position in einer Sparse-Datei aufrufe, der Schreibvorgang eine "Backfill" -Operation (Schreiben von 0s) auf allen vorhergehenden Bytes auslöst, was langsam ist.

Gibt es einen effizienteren Weg, um mit dieser Situation umzugehen?

Der folgende Code demonstriert das Problem. Der anfängliche Schreibvorgang dauert ungefähr 370 MS auf meinem Computer.

%Vor%     
revoxover 23.07.2013, 18:05
quelle

2 Antworten

7

NTFS unterstützt Sparse-Dateien , es gibt jedoch keine Möglichkeit, dies in .net zu tun ohne p / einige native Methoden aufzurufen.

Es ist nicht sehr schwer, eine Datei als sparse zu markieren. Sobald eine Datei als Sparse-Datei markiert ist, kann sie nicht wieder in eine Datei ohne Sparse konvertiert werden, außer wenn die gesamte Datei in eine neue nicht-spärliche Datei umgewandelt wird Datei.

Beispiel Verwendung

%Vor%

Sobald eine Datei als spärlich gekennzeichnet wurde, verhält sie sich jetzt so, als ob sie sich auch in den Kommentaren verhalten würde. Sie müssen kein Byte schreiben, um eine Datei auf eine festgelegte Größe zu markieren.

%Vor%

    
Scott Chamberlain 23.07.2013, 18:27
quelle
1

Hier ist ein Code für die Verwendung von Sparse-Dateien:

%Vor%

Und Beispielcode zum Testen der obigen Klasse.

%Vor%

Hoffe, das hilft

    
Paul 10.02.2015 07:36
quelle