如何在vb.net中处理一个非常大的数组

时间:2012-08-16 00:28:49

标签: vb.net arrays out-of-memory

我有一个生成大量数据的程序,它逐行写入csv文件(随着数据的创建)。如果我能够在excel中打开csv文件,它将是大约10亿个单元格(75,000 * 14,600)。我每次尝试访问它时都会抛出System.OutOfMemoryException(甚至创建一个这样大小的数组)。如果有人知道如何将数据带入vb.net,那么我可以做一些简单的操作(所有数据都需要立即可用)然后我会尝试你的每个想法。

我看过增加使用的ram数量,但其他文章/帖子说这将在10亿大关之前缩短。这里没有时间问题,假设它不超过几天/周我可以处理它(我每年只运行一次或两次)。如果您不知道这样做,我能想到的唯一其他解决方案是将excel中的列数增加到~75,000(如果可能的话 - 不能以相反的方式写入数据),或者我想如果有另一种语言可以解决这个问题吗?

目前它在开始时失败了:

 Dim bigmatrix(75000, 14600) As Double

非常感谢, 弗雷泽:)

1 个答案:

答案 0 :(得分:1)

首先,这将始终需要64位操作系统和相当大量的RAM,因为您尝试分配大约8 GB。

如果打开gcAllowVeryLargeObjects,这在理论上可以在Visual Basic中定位.NET 4.5。话虽这么说,如果可能的话,我建议使用jagged array而不是多维数组,因为这将消除需要单个8GB分配的要求。 (这也可能允许它在.NET 4或更早版本中工作。)