如何在C#中快速地将一个双精度数组写入文件?

时间:2014-09-21 17:43:30

标签: c#

我想把这样的东西写成文件:

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秒!)

文件格式为二进制。

我怎样才能加快速度?

2 个答案:

答案 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());
}