【发布时间】:2013-07-12 21:23:04
【问题描述】:
我需要快速存储/加载可能较大的 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 毫秒
有没有更快的方法?使用指针?将数组序列化为一维然后刷新到文件?
感谢您的任何建议。
【问题讨论】:
-
二进制格式化程序将是我能想到的最快的东西,但您需要提供更多代码来概述您在这些方面尝试过的内容,包括测试的元素数,因为我认为与遍历每个元素相比,将一个图序列化到文件会明显更快。
-
@StevePy 我实际上是在处理摄影图像,所以数组通常类似于
ushort[3,1440,2160]。BinaryFormatter非常快,尽管我认为它与数据结构无关。这就是为什么我想知道是否有一种更快的方法来利用数组的已知格式(我只对存储元素感兴趣,格式和数组大小是事先知道的)。 -
您的循环代码可能会被优化,但不会改变 I/O 时间。
标签: c# file serialization multidimensional-array