gpt4 book ai didi

c# - 在 C# 中从/向二进制文件读取/写入数组内容的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 22:46:33 29 4
gpt4 key购买 nike

我想读写大型原始卷文件的内容(例如 MRI 扫描)。这些文件只是一系列例如32 x 32 x 32 float ,因此它们可以很好地映射到一维数组。我希望能够将二进制卷文件的内容读入一维数组,例如float 或 ushort(取决于二进制文件的数据类型)并类似地将数组导出回原始卷文件。

使用 C# 执行此操作的最佳方法是什么?使用 BinaryReader/BinaryWriter 一次读取/写入 1 个元素?使用 FileStream.Read 将它们分段读入字节数组,然后在数组之间执行 System.Buffer.BlockCopy?编写我自己的 Reader/Writer?

编辑:似乎无法使用 > 2GB 的阵列,但问题仍然是较小的阵列(大约 256 MB 左右)

最佳答案

您不会获得包含超过 2GB 数据的数组。据我所知,每个对象的 CLR 限制为 1GB。这可能已针对 64 位上的 .NET 4 取消,但我还没有听说过。

编辑:根据 this article限制是 2GB,而不是 1GB - 但您仍然不会管理超过 2GB。

您真的必须一次将所有数据都存储在内存中吗?你能一次处理其中的大块吗?

编辑:好的,那么现在只是将文件读入 float 组?读取 block (使用 BinaryReader.Read(byte[], int, int)BinaryReader.ReadBytes(int))然后使用 Buffer 可能是最简单的.BlockCopy 有效地从字节转换为 float 等。请注意,这将是字节序敏感的。如果您想更稳健地转换(以便您以后可以更改字节顺序,或在大端平台上运行),您可能需要重复调​​用 ReadFloat()

您对代码的这个区域确实存在性能问题有多确信?值得做最简单的事情,然后对其进行分析,从...开始。

关于c# - 在 C# 中从/向二进制文件读取/写入数组内容的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600742/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com