Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将大型双数组保存为文件的最有效方法#_C#_File Type_Saving Data_Large Data - Fatal编程技术网

C# 在C中将大型双数组保存为文件的最有效方法#

C# 在C中将大型双数组保存为文件的最有效方法#,c#,file-type,saving-data,large-data,C#,File Type,Saving Data,Large Data,我正在编写一个程序,该程序将.dat文件中的数据读入双[,]数组,计算一些内容,并需要将数组写入一个文件以保存它们以供以后使用 这些数组最多可以有[64x64x1500]个元素,这迫使我已经将这些文件小部分加载到程序中以利用它们(否则调用MemoryException)。到目前为止,我一直使用textfiles在硬盘上保存较小的阵列,但逐步保存[64x64x150000]阵列后,每个文件的容量超过了6GB,当您需要处理大量的.dat文件,并且几乎要保留所有的.txt文件时,这会非常安静 因此,我

我正在编写一个程序,该程序将.dat文件中的数据读入双[,]数组,计算一些内容,并需要将数组写入一个文件以保存它们以供以后使用

这些数组最多可以有[64x64x1500]个元素,这迫使我已经将这些文件小部分加载到程序中以利用它们(否则调用MemoryException)。到目前为止,我一直使用textfiles在硬盘上保存较小的阵列,但逐步保存[64x64x150000]阵列后,每个文件的容量超过了6GB,当您需要处理大量的.dat文件,并且几乎要保留所有的.txt文件时,这会非常安静

因此,我想知道是否有任何其他文件类型可以节省一些硬盘空间,或者是否有另一种可能可以将这些阵列保存在我的程序之外,以便以后使用,并且需要更少的硬盘空间

(我需要能够在不同的计算机之间交换文件)。

(8b/double*(64*64*150000)double)/(109b/GB)=5.6gb

因此,除非您降低到较低的精度(浮动)或执行某种压缩,否则您将需要5.6GB来存储所有这些双精度。减少到浮动将需要每个文件2.8GB


对于长度为150000的64*64矢量中的每一个,您可以执行信号压缩(取决于数据的外观)。这是一个宽泛的话题,所以在不了解更多信息的情况下,我可以给你一个起点:。

要么压缩,要么尝试。double可能会占用文本中的几十个字节,具体取决于您的编码(每个数字1-2个字节)。在二进制文件中,每个字节正好是8个字节(+不管簿记的开销有多大,可能是最小的)。

至少可以压缩文本文件。平均有多少个数字?二进制是每“double”8个字节,但是
1.1,
占用的空间更少。浮点是4字节的二进制。你如何保存它们?结构格式的直接二进制文件,还是使用Xml之类的高级格式?如果您使用的是100%二进制,直接在8个字节上堆叠8个字节,而没有任何偏差,那么应该是4915200000字节。你能改成用单曲吗?这会将大小减少一半,因为单字节是4字节浮点,而双字节是8字节浮点。它也需要是一个浮动吗?e、 你可以使用一个4字节的整数吗?而且,这实际上取决于你的双数组所代表的数据类型。是否所有数据都是同一类型的。可以识别值中的冗余,并使用数字表来大幅减少磁盘空间。例如,您将较大的整数存储在一起,并让条目引用其索引(文件中的偏移量)。为什么不使用BinarySerializer直接序列化数组?ypu真的需要双打而不是浮球吗