我有库存的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;
}
}
答案 0 :(得分:0)
您需要问自己的第一个答案是,为什么要将所有记录加载到数据表中? 做一个SqlDataReader来读取数据,编辑它并evry(例如)100.000行做一个SqlBulkCopy来将它们重新插入表中,这比adapter.Fill()更快,并且也许您可以避免将所有4.000.000条记录存储在内存中。
如果您需要在一次“选择”中处理所有数据,则没有机会编辑web.Config,如下所示:
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
并编译一个x64二进制文件。