指定されたサイズのファイルを作成しています-ランダムでいいのですが、どのデータが含まれているかは関係ありません。現在私はこれを行っています:
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();
}
}
これは効率的ではなく、それを実行するための正しい方法でもありません。より高性能なソリューションはありますか?
すべての答えをありがとう。
編集
2Gbファイル(ミリ秒単位の時間)に対して次のメソッドでいくつかのテストを実行しました。
方法1:Jon Skeet
byte[] data = new byte[sizeInMb * 1024 * 1024];
Random rng = new Random();
rng.NextBytes(data);
File.WriteAllBytes(fileName, data);
該当なし-2Gbファイルのメモリ不足例外
方法2:Jon Skeet
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-HansPassant(超高速ですが、データはランダムではありません)
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fs.SetLength(sizeInMB * 1024 * 1024);
}
257、287、3、3、2、3など。