Я создаю файл указанного размера - мне все равно, какие данные в нем, хотя случайным было бы неплохо.В настоящее время я делаю это:
var sizeInMB = 3; // Up to many Gb
using (FileStream stream = new FileStream(fileName, FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
while (writer.BaseStream.Length <= sizeInMB * 1000000)
{
writer.Write("a"); //This could be random. Also, larger strings improve performance obviously
}
writer.Close();
}
}
Это не эффективный или даже неправильный способ сделать это.Какие-нибудь решения с более высокой производительностью?
Спасибо за все ответы.
Редактировать
Выполнены некоторые тесты для следующих методов для файла 2 ГБ (время в мс):
Метод 1: Джон Скит
byte[] data = new byte[sizeInMb * 1024 * 1024];
Random rng = new Random();
rng.NextBytes(data);
File.WriteAllBytes(fileName, data);
N / A - Исключение нехватки памяти для файла 2 ГБ
Метод 2: Джон Скит
byte[] data = new byte[8192];
Random rng = new Random();
using (FileStream stream = File.OpenWrite(fileName))
{
for (int i = 0; i < sizeInMB * 128; i++)
{
rng.NextBytes(data);
stream.Write(data, 0, data.Length);
}
}
@ 1K- 45 868, 23 283, 23 346
@ 128K - 24 877, 20 585, 20 716
@ 8Kb - 30 426, 22 936, 22 936
Метод 3 - Ганс Пассант (супер быстрый, но данныене случайно)
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fs.SetLength(sizeInMB * 1024 * 1024);
}
257, 287, 3, 3, 2, 3 и т. д.