我遇到了一个我无法解释的情况。我将一个双打数组转换为逗号分隔的字符串,并将其保存到数据库中以便以后检索。大约有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位机器。
答案 0 :(得分:2)
您的代码基本上创建了4,000个15,000个双打的列表。如果你有完美的字节打包,就会耗尽458 MB的内存。
我可以在32位应用程序中单独运行此代码,但没有任何问题,但如果我尝试创建14,800个15,000个双打的列表,我的内存不足。
我怀疑使用你的程序的其余部分和你的数据集,听起来你也有逗号分隔字符串中的数字,那么你很容易就会耗尽内存。