我遇到了一个无法解释的情况。我将 double 组转换为逗号分隔的字符串,并将其保存到数据库中以供以后检索。大约有 4k 条记录,每条记录都包含一个字符串,该字符串将创建一个大约 14k 数字的数组。当我尝试检索 double 列表并将它们放入 double 列表集合 (ea: List< List < double >>) 时,我收到了 OutOfMemoryException。现在,8bytes*15k*4k = 480megs。这距离列表的 OutOfMemory 限制还很远。
我做了一个简单的测试循环来解决问题并意识到两件事:
1:如果我在我的方法中(在Using语句中)使用这个~500meg的数据集,我会得到OutOfMemoryException。 (如果我不包含数据集,它工作正常)
2:如果我从“属性/调试”部分取消选中“首选 32 位”复选框。即使我使用这个 ~500meg 数据集,该方法也会正确完成
Q1:有人可以告诉我,当这个 ~500meg 数据集存在时,为什么我的方法失败了。
问题2:为什么“首选32位”解决了我的问题?我还没有机会在 32 位机器上测试这个......但我的第一个猜测是它会失败。
注意:我有一台 64 位机器。
最佳答案
您的代码基本上创建了 4,000 个包含 15,000 个 double 的列表。如果您有完美的字节打包,则已用掉 458 MB 内存。
我可以在 32 位应用程序中单独运行此代码,没有任何问题,但如果我尝试创建 14,800 个包含 15,000 个 double 的列表,则会耗尽内存。
我怀疑你的程序的其余部分和你的数据集,听起来你也有逗号分隔的字符串中的数字,那么你很容易就会耗尽内存。
关于c# - 内存不足异常 : When trying to iterate through a DataSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32961742/