【发布时间】:2015-12-20 04:25:02
【问题描述】:
我有一个应用程序读取 3-4 GB 的数据,从每一行构建实体,然后将它们存储在列表中。
我遇到的问题是,内存疯狂地增长到 13 到 15 GB。为什么存储这些实体会占用这么多内存。
所以我构建了一个 Tree 并做了类似于 Huffman Encoding 的操作,总内存大小变成了大约 200 - 300 MB。
我明白,我压缩了数据。但我没想到将对象存储在列表中会大大增加内存。为什么会这样?
字典、堆栈、队列、数组等其他数据结构怎么样?
我在哪里可以找到有关数据结构的内部和内存分配的更多信息?
还是我做错了什么?
【问题讨论】:
-
您真的需要内存中的所有数据(3-4 GB 是巨大的)吗?为什么不使用数据库或按需只读所需的行?
-
无关紧要。那不是我的问题。但是是的,我需要每一行。和文件是数据库。如果我逐行执行,我无法并行化程序。
-
"还是我做错了什么?"是的,你是。祝你好运!
-
每当您需要将 3-4GB 的数据加载到内存中并将它们作为一个整体进行处理(并且您不能将它们切成碎片)时,99% 的时间您正在接近以错误的方式解决问题。
-
也许您可以创建一个特殊的结构来处理这些类型的数据操作。一个基础级别的对象,用于管理检索、排序、并发、内存使用等操作。用于管理数据的基础对象可能称为“数据库”之类的东西。事实上,这些操作非常复杂,以至于一些有进取心的开发人员可能会通过销售能够做到这一点的整个产品来赚钱。呸……这都是疯话……
标签: c# .net memory collections