【发布时间】:2020-01-30 20:00:56
【问题描述】:
我有库存 ohlc 数据,总记录数为 400 万条记录,但是当我从数据适配器将数据加载到数据表中时,它会给我一个内存不足的错误。
查询
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;
}
}
【问题讨论】:
-
400 万条记录很多..
-
尝试运行查询,将行数限制为 TOP 100000,然后按自己的方式达到 400 万行以检查您的限制
-
您正在尝试将 4 m 行数据加载到内存中?这很可能是您出现内存不足异常的原因。这意味着程序不能分配比您尝试使用更多的内存。如果每行有 1 kb 的内存 - 你需要大约 1kb * 4000000 = 4 GB 的内存来存储每一行。这可能太多了。您可以打开 Windows 任务管理器并在性能选项卡下检查您的内存使用情况。我认为您不应该尝试一次加载 400 万条记录。而是尝试在 SQL 中执行的任何操作,因为数据库服务器旨在处理此类数字。
-
如果您只是展示您的数据,请尝试使用 where 删除不相关的行,或使用 cmets 中建议的 TOP(数量)来限制行数。
标签: c# database datatable stock dataadapter