c# - 内存不足异常 : When trying to iterate through a DataSet

标签 c# dataset out-of-memory

我遇到了一个无法解释的情况。我将 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 位机器。

enter image description here

最佳答案

您的代码基本上创建了 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/

相关文章:

c# - 如何使用不同的时区将 UTC 日期和时间转换为本地时间 Nodatime

c# - java/C#.NET在windows上执行linux操作

tensorflow - 如何将 Tensorflow 数据集 API 与训练集和验证集结合使用

python - 数据集中的 load_dataset ('multi_nli' )无法正常工作,出现导入错误

c# - 我可以使用查询设计器针对数据集编写 Linq 查询吗

c# - 何时以及如何交换 .NET 托管堆?

加载大量文件时发生 Java ImageIO.read() OutOfMemoryError

c# - 没有正则表达式的字符串中的多个数字

C# ListView 列宽自动

c# - System.Security.Policy.Evidence、Web 服务和 Blow Out the LoH