【发布时间】:2014-09-02 09:48:29
【问题描述】:
我正在编写一个程序,它将 .dat 文件中的数据读取到 double[,,] 数组中,计算一些东西,并且需要将数组写入文件以保存它们以供以后使用。
这些数组最多可以有 [64x64x150000] 个元素,这迫使我已经将这些文件分成小部分加载到程序中以使用它们(否则会调用 MemoryException)。到目前为止,我使用文本文件将较小的数组保存在我的硬盘上,但是逐步保存 [64x64x150000] 数组最后会填满每个文件超过 6GB 的空间,当您必须使用大量这些 .dat- 时,这很安静文件,并且几乎可以保留所有 .txt 文件。
所以我想知道是否有任何其他文件类型可以节省一些硬盘空间,或者是否有另一种可能性将这些数组保存在我的程序之外以供以后使用,而对硬盘空间的要求更少。
(我需要能够在不同计算机之间交换文件)。
【问题讨论】:
-
最低限度您可以压缩文本文件。
-
多少位数(平均)?二进制每个'double' 8 个字节,但
"1.1,"占用的空间更少。float是 4 字节二进制。 -
你是如何保存它们的?直接使用结构格式的二进制文件,还是使用 Xml 之类的高级格式?如果您使用 100% 二进制直接在 8 个字节上堆叠 8 个字节而没有绒毛,那么它应该是 4,915,200,000 字节。您可以将其更改为使用单个吗?这会将大小减少一半,因为单是 4 字节浮点数,而双精度是 8 字节浮点数。它还需要浮动吗?例如你可以使用一个 4 字节的整数吗?
-
另外,这真的取决于你的双数组代表什么样的数据。是否都是同一类型的数据。可以识别值中的冗余并使用数字表来大幅减少磁盘空间。例如。您将更大的整数存储在一起,并让条目引用它们的索引(文件中的偏移量)。
-
为什么不直接使用 BinarySerializer 直接序列化数组呢? ypu 真的需要双打而不是浮动等
标签: c# file-type saving-data large-data