我需要快速存储/加载可能很大的ushort[,,]
,byte[,,]
或double[,,]
数组。
我尝试过简单的方法,只需将元素按元素扫描到FileStream fs
:
for (p = 0; p < Planes; p++)
{
for (y = 0; y < Height; y++)
{
for (x = 0; x < Width; x++)
{
fs.Write(BitConverter.GetBytes(array1[p, y, x]), 0, 8);
}
}
}
我已将此循环替换为BinaryFormatter
,效果更好:
bf.Serialize(fs, array1);
我运行了一个小基准存储,然后加载3 x 1024 x 768双倍数组10次,结果如下:
天真的方法: 10 628 ms
BinaryFormatter方法: 8 722 ms
有没有更快的方法?使用指针?将数组序列化为一维,然后刷新到文件?
感谢您的任何建议。
答案 0 :(得分:0)
使用MemoryStream
撰写数据,然后copyTo
FileStream
ms.copyTo(fs)
它将通过硬盘加速您的IO操作
答案 1 :(得分:0)
好的,经过多次实验,BinaryFormatter
和FileStream
是我找到的最快的解决方案。
我在没有提高速度的情况下测试了以下替代方案:
MemoryStream
,然后将其复制到FileStream
FileStream
BufferedFileStream
BinaryWriter
而不是BinaryFormatter