使列表<struct>内存不足c#</struct>

时间:2014-11-26 06:48:50

标签: c#

我有以下代码要将数据表数据保存到列表中我在数据表中有100万条记录但是在524288行之后我收到此错误 mscorlib.dll中出现“System.OutOfMemoryException”类型的异常,但未在用户代码中处理 我该如何解决?

谢谢

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;
}

1 个答案:

答案 0 :(得分:3)

如果您实际上将Dg的实例添加到列表中,则可以添加近7000万。要添加的类型DgShowTA_Manage_Darkhast_column必须大得多,才能让您失败只有50万。

在这种情况下,我认为最简单的方法是将DgShowTA_Manage_Darkhast_column类型从struct更改为class,如果可能的话。它显然是一个很大的类型,所以你并没有真正获得太多的价值类型,而且它显然阻碍了你维护一个大型集合的能力。

您可以采取其他方法:

  • 将数据存储在某种分层数据结构(例如列表列表)中
  • 根本不要将大量数据存储在内存中(例如,在数据库端进行初步处理的写查询,以便内存中的数据结构不必太大)

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