Как создать быструю и эффективную запись файлового потока на большие разреженные файлы
У меня есть приложение, которое пишет большие файлы в нескольких сегментах. Я использую FileStream.Seek для позиционирования каждого wirte. Похоже, что когда я вызываю FileStream.Write в глубокой позиции в разреженном файле, запись запускает операцию «обратной засыпки» (запись 0 с) для всех предшествующих байтов, которая является медленной.
Есть ли более эффективный способ справиться с этой ситуацией?
Код ниже демонстрирует проблему. Начальная запись занимает около 370 мс на моей машине.
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());
}