Jak stworzyć szybki i wydajny zapis strumieniowy na dużych plikach rzadkich
Mam aplikację, która zapisuje duże pliki w wielu segmentach. Używam FileStream.Seek do pozycjonowania każdego wątku. Wydaje się, że gdy wywołam FileStream.Write w głębokiej pozycji w rzadkim pliku, zapis wyzwala operację „wypełniania zapasów” (zapis 0s) na wszystkich poprzednich bajtach, co jest powolne.
Czy istnieje bardziej skuteczny sposób radzenia sobie z tą sytuacją?
Poniższy kod demonstruje problem. Początkowy zapis zajmuje około 370 MS na moim komputerze.
public void WriteToStream()
{
DateTime dt;
using (FileStream fs = File.Create("C:\\testfile.file"))
{
fs.SetLength(1024 * 1024 * 100);
fs.Seek(-1, SeekOrigin.End);
dt = DateTime.Now;
fs.WriteByte(255);
}
Console.WriteLine(@"WRITE MS: " + DateTime.Now.Subtract(dt).TotalMilliseconds.ToString());
}