我有一个应用程序加载1500,000到网格。问题是需要大量的内存。 (1.8 GB)SqlDataAdapter内存使用情况
我观察了下,
- 相同的查询,如果我对SQL查询 分析器运行需要60MB左右
- 在实际应用中,如果我只是执行 的ExecuteNonQuery()它也需要 某处大约60MB。
问题出在我执行它来获取输出为DataTable时,我觉得在我这样做的时候有一些问题。请帮忙。
这是我做的方式,加载了大量的数据时(即使我叫SP,它也执行我作为一个参数传递的SQL)
using (var conn = new SqlConnection(connStr))
{
SqlCommand command = conn.CreateCommand();
//DbCommand command = conn.CreateCommand();
command.CommandTimeout = 30000;
conn.Open();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = spName;
SqlDataAdapter da = new SqlDataAdapter(command);
dt = new DataTable();
da.Fill(dt);
if (dt != null)
{
if (dt.Rows.Count == 0)
{
dt = null;
}
}
conn.Close();
}
尝试RedGates的内存分析器,但没有有用的线索。 –
你正在装载什么样的数据?它是数字,字符串,日期时间还是所有的组合?如果您将数据库中的1.5百万条记录加载到数据表中,可能会导致相当多的内存使用量。正如Boas所说,投入一些时间进行分页将意味着您不必一次加载整个150万行,并且会节省大量的内存。这只意味着你更频繁地访问数据库以获得一组新结果。 –
穆斯,纠正它是数据类型的混合。我将所有记录加载到DataTable,然后加载到DataGrid以显示它们。当我们滚动时,如果应用程序可以加载它,则可以实现分页。你知道一个可行的实施方式吗? –