将数据加载到数据表C#中时出现内存不足错误

时间:2019-10-01 13:51:12

标签: c# database datatable stock dataadapter

我有库存的ohlc数据,总记录数为4百万条记录,但是当我从数据适配器将数据加载到数据表中时,这会给我造成内存不足的错误。

查询

SELECT company_id,trading_Date,trading_open,trading_high, trading_low,trading_close,trading_vol 
FROM company_trading1sIntl 
WHERE company_id = 'YM' 
ORDER BY trading_Date 

功能

public DataTable FillDT(string query, SqlConnection conn)
{
    SqlCommand sqlcmd = new SqlCommand(query,conn);
    SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd);
    DataTable dt = new DataTable();

    try
    {
        sqlda.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            return dt;
        }
        else
        {                   
            return null;
        }
    }
    catch(Exception ex)
    {
        return null;
    }        
} 

1 个答案:

答案 0 :(得分:0)

您需要问自己的第一个答案是,为什么要将所有记录加载到数据表中? 做一个SqlDataReader来读取数据,编辑它并evry(例如)100.000行做一个SqlBulkCopy来将它们重新插入表中,这比adapter.Fill()更快,并且也许您可以避免将所有4.000.000条记录存储在内存中。

如果您需要在一次“选择”中处理所有数据,则没有机会编辑web.Config,如下所示:

<runtime>
    <gcAllowVeryLargeObjects enabled="true" />    
</runtime>

并编译一个x64二进制文件。