【发布时间】:2019-04-29 06:20:52
【问题描述】:
我正在处理大约 3 GB 的数据。它存储在 Oracle 数据库中。我的任务是在 datagridview 上列出这些数据。这就是为什么我创建了一个类来存储这些数据,然后我使用这个 genericList 来推送 datagridview 的数据源。然而,在 ram 中处理了大约 1300 行数据后,代码返回“stackoutofmemory”异常。然后程序停止运行。
上传 1300 mb 数据后,我尝试清除 genericList 数据,并使用垃圾收集清除 ram 中的数据。但它没有用。 vshost32.exe 还是增加了。
var dataList = cmd=........... // get dataList from DB
list<class> dataList2 = new list<class>();
foreach(var data in dataList) {
dataList2.add(new class{
...........//fill the DataList2
});
datagridview.datasource = datalist2;
我希望我的 genericlist 会在 genericList 被填充后正常运行。但是vshost32.exe被抛出systemoutofmemory异常。
【问题讨论】:
-
为什么你需要在你的内存/列表中加载 3 GB 的数据?您到底想达到什么目标,也许我们可以寻找更好的解决方案。请记住,清除列表@XXXmb 可能会为您解决问题,但可能会在内存较少的低规格设备上导致同样的问题
-
实际上我对硬件没有任何限制。我使用的是 16gb Ram 和 500gb SSD。我以为我的硬件很容易运行。但不知何故,视觉工作室抛出 systemoutofexception 。我不明白。
-
但是你为什么要首先这样做呢? saied 列表中实际存储了什么?
-
因为我在 datagridview 上需要 3 gb。我将在 datagridview 顶部添加一些过滤器属性。我将处理 datagridview 上的数据,例如更新、删除或插入。但我想查看 datagridview 中的所有数据。否则我无法处理数据。
-
DataGridView从未设计用于处理如此可笑的海量数据。我严重怀疑您是否真的需要一次所有 3GB 的内存数据。
标签: c# winforms memory-management out-of-memory stack-overflow