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%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%
Tags und Links c# file-io sparse-matrix filestream