2

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

BinaryFormatter 方法:8 722 毫秒

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

感谢您的任何建议。

4

2 回答 2

0

用来MemoryStream写数据,然后copyTo你的FileStream

ms.copyTo(fs)

它将加快您使用硬盘驱动器的 IO 操作

于 2013-07-15T05:25:11.993 回答
0

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

我已经测试了以下替代方案而没有提高速度:

  • 写入MemoryStream,然后将其复制到FileStream
  • 包裹FileStream_BufferedFileStream
  • 在天真的循环中使用BinaryWriter,而不是BinaryFormatter
于 2013-07-15T07:50:22.987 回答