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

时间:2012-07-26 14:50:18

标签: c# list file storing-data

我正在制作组合生成器。对于少量元素,计算机不会将数据存储在RAM存储器中而不是存储在文件中。但是当元素数量变大时,我的计算机内存不足(发生OutOfMemoryException异常)。组合是存储在列表中的数字,当前存储在另一个列表中。

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

我不想将数据转换为文本,并在需要时将文本转换回数据。我认为这会因为转换而变慢。我希望将列表存储到自定义文件中,程序可以从中直接提取数据而无需任何转换。

4 个答案:

答案 0 :(得分:3)

有很多选择,我将简要介绍一些。

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

  • 使用描述二进制序列化程序中的一个.net序列化程序将是您的最佳选择。这些系列化产品具有很多优势,相对较快,并且内置支持并且非常易于使用。

  • 使用自定义二进制格式。这将是最快的选项,特别是如果您将其与内存映射文件结合使用。然而,二进制格式可能难以使用且易于搞砸。

答案 1 :(得分:3)

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

但我不建议您以这种方式生成组合,如果您不需要一次存储它们并在此之后加载很长时间。最好使用延迟生成的组合。一个接一个,完全生成而不需要“在将来生成更大的组合”(逐个生成“最大的”所需组合 - 你可能想要改变你的生成算法 - 有很多答案如何做到这一点)

答案 2 :(得分:2)

关于如何序列化List<>的文章很好。到http://www.switchonthecode.com/tutorials/csharp-tutorial-serialize-objects-to-a-file

的文件

答案 3 :(得分:0)

您可以将某些内容用作持久数据结构,这样可以减少应用程序所需的内存量,而不会过多地改变当前代码。 看看这个问题:

Looking for a simple standalone persistent dictionary implementation in C#

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