OutOfMemoryException:尝试遍历数据集时

OutOfMemoryException: When trying to iterate through a DataSet

我遇到了一个我无法解释的情况。我将一个双精度数组转换为逗号分隔的字符串,并将其保存到数据库中以供以后检索。大约有 4k 条记录,每条记录包含一个字符串,该字符串将创建一个包含大约 14k 个数字的数组。当我试图检索我的双打列表并将它们放入双打列表的集合中时 (ea: List< List < double > >) 我得到了 OutOfMemoryException。现在,8bytes*15k*4k = 480megs。这离列表的 OutOfMemory 限制还差得很远。

我做了一个简单的测试循环来解决问题并实现了两件事:

1:如果我在我的方法中(在 Using 语句中)使用这个 ~500meg 数据集,我会得到 OutOfMemoryException。 (如果我不包括数据集,它工作正常)

2:如果我取消选中 Properties/Debug 部分的 "Prefer 32bit" 复选框。即使我使用这个 ~500meg 数据集

,该方法也会正确完成

Q1:有人能告诉我为什么当这个 ~500meg 数据集存在时我的方法失败了。

Q2:为什么"Prefer 32bit"解决了我的问题?我还没有机会在 32 位机器上测试它……但我的第一个猜测是它会失败。

注意:我有一台64位机器。

您的代码基本上是创建 4,000 个包含 15,000 个双打的列表。如果你有完美的字节打包,那就是 458 MB 的内存用完了。

我可以 运行 在 32 位应用程序中单独使用此代码没有问题,但是如果我尝试创建 14,800 个包含 15,000 个双打的列表,我 运行 内存不足。

我怀疑你的程序和数据集的其余部分,听起来你也有逗号分隔字符串中的数字,那么你很容易 运行 内存不足.