OutOfMemoryException:尝试迭代DataSet时

时间:2015-10-06 04:27:11

标签: c# dataset out-of-memory

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

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

1:如果我在我的方法中使用~500meg DataSet(在Using语句中),我得到OutOfMemoryException。 (如果我不包含DataSet,它可以正常工作)

2:如果我取消选中"首选32位"属性/调试部分的复选框。即使我使用~500meg DataSet

,方法也会正确完成

Q1:当有~500meg DataSet存在时,有人可以告诉我为什么我的方法失败了。

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

注意:我有64位机器。

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

我怀疑使用你的程序的其余部分和你的数据集,听起来你也有逗号分隔字符串中的数字,那么你很容易就会耗尽内存。