使列表<结构>内存中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;
}

使列表<结构>内存中C#

如果您实际上将Dg实例添加到列表中,您将能够添加近 7000 万个。要添加的类型,DgShowTA_Manage_Darkhast_column ,必须大得多,您才能在五十万时失败。

在这种情况下,我认为您最容易做的是将类型DgShowTA_Manage_Darkhast_columnstruct 更改为 class ,如果可能的话。它显然是一个大型类型,因此您并没有真正获得太多使其成为值类型,并且它同样明显地阻碍了您维护所需大型集合的能力。

您还可以采用其他方法:

  • 将数据存储在一些分层数据结构中(例如列表列表)
  • 根本不要在内存中存储那么多数据(例如,编写在数据库端进行初步处理的查询,这样内存中的数据结构就不必那么大)

如果您能提供更好的代码示例和更多上下文,也许可以提供更好的答案。