我想把这样的东西写成文件:
FileStream output = new FileStream("test.bin", FileMode.Create, FileAccess.ReadWrite);
BinaryWriter binWtr = new BinaryWriter(output);
double [] a = new double [1000000]; //this array fill complete
for(int i = 0; i < 1000000; i++)
{
binWtr.Write(a[i]);
}
不幸的是,这段代码的过程持续了很长时间! (在这个例子中大约10秒!)
文件格式为二进制。
我怎样才能加快速度?
答案 0 :(得分:9)
您应该能够通过将双精度数组转换为字节数组来加速进程,然后一次性写入字节。
This answer显示了如何进行转换(以下代码来自该答案):
static byte[] GetBytes(double[] values) {
var result = new byte[values.Length * sizeof(double)];
Buffer.BlockCopy(values, 0, result, 0, result.Length);
return result;
}
掌握了字节数组you can call Write
that takes an array of bytes:
var byteBuf = GetBytes(a);
binWtr.Write(byteBuf);
答案 1 :(得分:0)
你正在逐字逐句地写字节,当然它会变慢。
您可以在内存中写入数组,然后将数组一次性写入磁盘:
var arr = new double[1000000];
using(var strm = new MemoryStream())
using (var bw = new BinaryWriter(strm))
{
foreach(var d in arr)
{
bw.Write(d);
}
bw.Flush();
File.WriteAllBytes("myfile.bytes",strm.ToArray());
}