C#保存多维数组

C#保存多维数组,c#,multidimensional-array,C#,Multidimensional Array,我已经为一款C#XNA游戏工作了一段时间,现在正准备使用保存/加载功能。我有一长串数组,其中包含需要保存和加载的各种信息 我想知道这样做的最佳过程是什么?我在看protobuf,但是包含所有tile数据的数组是多维的,格式如下tile[z,x,y]。我可以使用binaryformatter保存此文件,但它的输出速度超过350mb,需要2分钟以上。我也尝试过使用streamwriter来编写它,它速度更快,但占用的磁盘空间也差不多。有没有关于如何最好地继续的建议?您的磁贴数组中可能有很多零,因此您

我已经为一款C#XNA游戏工作了一段时间,现在正准备使用保存/加载功能。我有一长串数组,其中包含需要保存和加载的各种信息


我想知道这样做的最佳过程是什么?我在看protobuf,但是包含所有tile数据的数组是多维的,格式如下tile[z,x,y]。我可以使用binaryformatter保存此文件,但它的输出速度超过350mb,需要2分钟以上。我也尝试过使用streamwriter来编写它,它速度更快,但占用的磁盘空间也差不多。有没有关于如何最好地继续的建议?

您的磁贴数组中可能有很多零,因此您可以考虑更有效的存储方法


一种方法是保存管状体:(x,y,z,value)。如果75%或更多的磁贴为零,则另一种解决方案是使用压缩:

压缩,如果您想节省磁盘空间。保留StreamWriter,但将其与System.IO.Compression类一起使用。您可以尝试(但这取决于您拥有的数据类型)将其存储为稀疏文件(但无法从.NET设置此标志,因此您必须返回本机CreateFile函数)。如果你让操作系统为你做这件事,那么你就不需要特殊的代码来处理(而且速度会快得多)。哦,顺便说一下,如果它是瓦片[[,] ],而不是瓦尔德[][],那么你甚至可以考虑做一个原始内存转储(对瓦片[[,] ]的顺序访问要比瓦尔德[][][]慢。为什么你不尝试使用某种数据库,我不认为当你有这么多的一个瓦片包含什么样的数据时,从文件中读取是值得的?是否需要保存所有字段,或者可以从其他字段计算某些字段/属性?你的数组是“稀疏”的还是大部分坐标都被占用了?最后,你需要更快的速度吗?如果线程同步不是一个问题,那么可以使用异步IO来实现。它不会更快,但您的应用程序不需要等待IO完成。当然,你可以把所有的东西都放在一起:带有异步I/O的压缩流(这与在另一个线程中写入不同)到一个稀疏文件(我忘了提到它只支持NTFS)。为此,我来看看压缩,速度还不错,它的文件大小是一个问题,理想情况下希望它低于50mb。您建议将其更改为锯齿阵列还是保持原样?感谢您的建议,没有一个磁贴将为零,但我确实有一些如何更有效地保存它们的想法。我认为压缩是最好的方法。