快速加载/保存多维数组

时间:2013-07-15 04:56:59

标签: c# file serialization multidimensional-array

我需要快速存储/加载可能很大的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

有没有更快的方法?使用指针?将数组序列化为一维,然后刷新到文件?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

使用MemoryStream撰写数据,然后copyTo FileStream

ms.copyTo(fs)

它将通过硬盘加速您的IO操作

答案 1 :(得分:0)

好的,经过多次实验,BinaryFormatterFileStream是我找到的最快的解决方案。

我在没有提高速度的情况下测试了以下替代方案:

  • 写信至MemoryStream,然后将其复制到FileStream
  • FileStream
  • 中换BufferedFileStream
  • 在天真循环中使用BinaryWriter而不是BinaryFormatter
相关问题