内存不足c#List<&燃气轮机;

内存不足c#List<&燃气轮机;,c#,list,out-of-memory,C#,List,Out Of Memory,我使用列表存储来自数据库的数据调用,以便在printdocument中打印。 但当行数超过300时,会发生OutOfMemoryException。 有没有清除内存的方法?或任何其他向列表中添加数据的方法 private List<FormName> printItem = new List<FormName>(); public string printItemCode; public string printPartNo; public string printIss

我使用列表存储来自数据库的数据调用,以便在printdocument中打印。 但当行数超过300时,会发生OutOfMemoryException。 有没有清除内存的方法?或任何其他向列表中添加数据的方法

private List<FormName> printItem = new List<FormName>();
public string printItemCode;
public string printPartNo;
public string printIssued;
public string printUOM;

//call from database
using (var rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        FormName item = new FormName()
        {
            printItemCode = rdr[0].ToString(),
            printPartNo = rdr[1].ToString(),
            printIssued = rdr[2].ToString(),
            printUOM = rdr[3].ToString(),
        };

        printItem.Add(item);
    }
}
private List printItem=new List();
公共字符串printItemCode;
公共字符串printPartNo;
已发布公共字符串;
公共字符串printUOM;
//来自数据库的调用
使用(var rdr=cmd.ExecuteReader())
{
while(rdr.Read())
{
FormName项=新的FormName()
{
printItemCode=rdr[0]。ToString(),
printPartNo=rdr[1]。ToString(),
PrintIssuited=rdr[2]。ToString(),
printUOM=rdr[3]。ToString(),
};
printItem.Add(项目);
}
}

使用类而不是FormName解决问题

private List<Items> printItem = new List<Items>();

class Items
{
    public string printItemCode { get; set; }
    public string printPartNo { get; set; }
    public string printIssued { get; set; }
    public string printUOM { get; set; }
}


using (var rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        Items item = new Items()
        {
            printItemCode = rdr[0].ToString(),
            printPartNo = rdr[1].ToString(),
            printIssued = rdr[2].ToString(),
            printUOM = rdr[3].ToString(),
        };

        printItem.Add(item);
    }
}
private List printItem=new List();
类别项目
{
公共字符串printItemCode{get;set;}
公共字符串printPartNo{get;set;}
公共字符串printIssuited{get;set;}
公共字符串printUOM{get;set;}
}
使用(var rdr=cmd.ExecuteReader())
{
while(rdr.Read())
{
项目=新项目()
{
printItemCode=rdr[0]。ToString(),
printPartNo=rdr[1]。ToString(),
PrintIssuited=rdr[2]。ToString(),
printUOM=rdr[3]。ToString(),
};
printItem.Add(项目);
}
}

其中有多少列是
varchar(max)
?还有,您有多少RAM?@Nisarg刚刚从Access数据库的20列中调用了4。我使用的是4GB内存和64位操作系统什么是SelectPreviewIR?您可能运行在64位操作系统上,但这并不意味着您的进程是64位的。你在编译什么架构?如果你能提供一个。两个可能的原因浮现在脑海中。a) 您永远不会清除
printItem
,因此它会随着您反复运行代码而不断增长。b) 您的某些值非常大(通过检查
rdr[0].ToString().Length
以及
1
2
3
)来检查此值。可以添加
项=null