如何在C#中非常快速地将一个doubles数组写入一个文件
本文关键字:一个 数组 文件 doubles 非常 | 更新日期: 2023-09-27 18:23:44
我想在文件中写这样的东西:
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秒!)
文件格式为二进制。
我怎样才能更快?
您应该能够通过将doubles数组转换为字节数组来加快进程,然后一次性写入字节。
这个答案显示了如何进行转换(下面的代码来自这个答案):
static byte[] GetBytes(double[] values) {
var result = new byte[values.Length * sizeof(double)];
Buffer.BlockCopy(values, 0, result, 0, result.Length);
return result;
}
有了字节数组,您可以调用Write
,它采用字节数组:
var byteBuf = GetBytes(a);
binWtr.Write(byteBuf);
您正在以1乘1的方式写入字节,当然这会很慢。
您可以在内存中写入一个数组,然后一次将数组写入磁盘,如下所示:
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());
}