C# 将数据存储到自定义文件中

C# 将数据存储到自定义文件中,c#,list,file,storing-data,C#,List,File,Storing Data,我正在做一个组合发电机。对于少量元素,数据存储在RAM内存中而不是文件中对计算机来说不是问题。但是当元素的数量变大时,我的计算机内存就会耗尽(发生OutOfMemoryException异常)。这些组合是存储在列表中的数字,当前存储在另一个列表中 但这只是第一步——发电机工作正常。我希望数据存储在文件中,不同的程序可以从中提取所需的组合。大多数情况下,我需要将数据存储在一个单独的文件中,因为生成器必须能够在将来创建越来越多更大的组合。计算机必须读取数据的某些部分,而不在临时存储器中处理所有数据,

我正在做一个组合发电机。对于少量元素,数据存储在RAM内存中而不是文件中对计算机来说不是问题。但是当元素的数量变大时,我的计算机内存就会耗尽(发生OutOfMemoryException异常)。这些组合是存储在列表中的数字,当前存储在另一个列表中

但这只是第一步——发电机工作正常。我希望数据存储在文件中,不同的程序可以从中提取所需的组合。大多数情况下,我需要将数据存储在一个单独的文件中,因为生成器必须能够在将来创建越来越多更大的组合。计算机必须读取数据的某些部分,而不在临时存储器中处理所有数据,因为这是不可能的


我不想将数据转换成文本,也不想在需要时将文本转换回数据。我认为这将使事情变得更慢,因为转换。我希望列表存储到一个定制的文件中,程序可以直接从中提取数据,而无需任何转换。

您可以使用某种东西作为持久数据结构,这将减少应用程序所需的内存量,而不会改变太多的当前代码。 看看这个问题:


有很多资源在做这件事,特别是似乎指向了一些非常有趣的链接:

关于如何将列表序列化到文件,有一篇很好的文章,

有很多可用的选项,我将简要介绍一些

  • 使用数据库。从您的描述来看,这看起来不是一个好的选择,但对于所有客户来说,它将是最灵活、最快速、最高效的存储

  • 使用描述中的一个.net序列化程序二进制序列化程序将是您的最佳选择。serlizers提供了很多优点,比如速度快、嵌入.net、内置支持和易于使用

  • 使用自定义二进制格式。这将是最快的选择,尤其是当您将其与内存映射文件结合使用时。然而,二进制格式很难使用,也很容易出错


如果您确实想将数据存储在文件中,可以使用类。这可能是将数据对象序列化为二进制流的最有效方法


但我不建议您以这种方式生成组合,只要您不需要一次存储它们,然后再加载很长时间。最好使用延迟生成的组合。一个接一个,完全生成,无需“在将来生成更大的组合”(一个接一个地生成所需的“最大”组合-您可能需要稍微更改生成算法-已经有很多解决方法)

您需要以二进制格式存储数据,或者使用数据库。这是很好的背景信息,但似乎在任何地方都没有问题。另外,在代码方面是否存在一些特定的问题?如果是这样的话,请发布您迄今为止所做的尝试。本教程解释了如何将数据转换为文本文件,而这正是我不想做的。计算机将创建文件,计算机将读取它,而不是人类用户。我想将数据存储到一个非文本文件中,程序可以从中读取数据而无需任何转换。但是序列化是否允许将数据存储到非文本文件中?教程中没有提到这一点。我只是尝试了代码。它有一些小错误,但很容易解决。数据文件(尽管名称选择不当)肯定不是文本文件。不过,我必须弄清楚程序是如何读取该文件的。本教程中也没有对此进行解释。我必须找到一种方法让程序读取文件的某些部分,而不读取整个数据(否则,计算机的内存在读取完文件之前就会被填满)。我只是问如何存储数据。这是一个不同的问题,在这种情况下我将如何使用它。