c# - 快速加载/保存多维数组

标签 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 double 组 10 次,结果如下:

朴素方法:10 628 毫秒

BinaryFormatter 方法:8 722 毫秒

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

感谢您的任何建议。

最佳答案

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

ms.copyTo(fs)

它会加速你对硬盘的IO操作

关于c# - 快速加载/保存多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647015/

相关文章:

php - 爆炸功能无法正常工作

r - 如何使用saveRDS(...,refhook =)参数?

c# - 如何从字符串中删除部分 "http://"?

c# - 如何使带有验证错误列的表格居中

java - 二维数组或文件中线的处理范围

file - 如何在 ubuntu 中打开一个大的 sql 脚本(22GB!)?

NHibernate 序列化问题 - 类型 'NHibernate.Cfg.Configuration' 未标记为可序列化

c++ - 在 C++ 中以通用的可移植方式识别类型

c# - WPF ListBoxItem ControlTemplate 破坏了一些 MouseDown/Selection

c# - C# 中从字符串中删除换行符的最简单方法是什么?