使列表<结构>内存中C#
本文关键字:内存 结构 列表 | 更新日期: 2023-09-27 18:32:04
我有以下代码将数据表数据保存到列表中,我在数据表中有 100 万条记录,但在524288行之后我收到此错误mscorlib 中发生了类型为"System.OutOfMemoryException"的异常.dll但未在用户代码中处理我该如何解决?
谢谢
public struct Dg {
public int Id;
public int b;
}
public List<Dg> DgShow() {
List<Dg> list_m = new List<Dg>();
if (dt.Rows.Count > 0) {
for (i = 0; i <= dt.Rows.Count - 1; i++) {
Dg a = new Dg();
a.Id = Convert.ToInt32(dt.Rows[i]["Id"].ToString());
a.b = Convert.ToInt32(dt.Rows[i]["Idb"].ToString());
list_m.Add(a);
}
}
return list_m;
}
如果您实际上将Dg
实例添加到列表中,您将能够添加近 7000 万个。要添加的类型,DgShowTA_Manage_Darkhast_column
,必须大得多,您才能在五十万时失败。
在这种情况下,我认为您最容易做的是将类型DgShowTA_Manage_Darkhast_column
从 struct
更改为 class
,如果可能的话。它显然是一个大型类型,因此您并没有真正获得太多使其成为值类型,并且它同样明显地阻碍了您维护所需大型集合的能力。
您还可以采用其他方法:
- 将数据存储在一些分层数据结构中(例如列表列表)
- 根本不要在内存中存储那么多数据(例如,编写在数据库端进行初步处理的查询,这样内存中的数据结构就不必那么大)
如果您能提供更好的代码示例和更多上下文,也许可以提供更好的答案。