使用非常大的列表的最快/最有效的方法(在c#中)

时间:2014-01-11 11:30:23

标签: c# list stream containers large-data

这个问题与讨论here有关,但也可以单独处理。 另外我认为将相关结果放在一个单独的线程中会很好。我无法在网上找到全面处理该主题的任何内容。

我们说我们需要使用非常大的List<double>数据(例如20亿条目)。

将大型列表加载到内存中会导致"System.OutOfMemoryException" 或者,如果使用<gcAllowVeryLargeObjects enabled="true|false" />,最终只会占用整个记忆。

第一:如何最小化容器的大小:

  • 一个20亿双的数组会更便宜吗?
  • 使用小数而不是双打?
  • 有一个数据 - 甚至比C#中的十进制更便宜(-100 在0.00001步骤中的100将为我做的工作)

第二:将数据保存到光盘并阅读

  • 将List保存到磁盘并再次读取它的紧固方法是什么?

在这里,我认为文件的大小可能是个问题。包含20亿条目的txt文件将是巨大的 - 打开它可能需要数年时间。 (也许程序和txt文件之间的某种类型的流可以完成这项工作吗?) - 非常感谢一些示例代码:)

第三:迭代

  • 如果List在内存中,我认为使用yield会有意义。
  • 如果列表保存到磁盘,则迭代速度主要受速度限制 我们可以从光盘上读到它。

0 个答案:

没有答案