SqlDataAdapter内存使用情况
本文关键字:情况 用情 内存 SqlDataAdapter | 更新日期: 2023-09-27 18:00:43
我有一个将1500000加载到网格的应用程序。问题是它需要大量内存。(1.8 GB)
我观察到以下
- 如果在SQL查询上运行,则执行相同的查询Analyzer大约需要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();
}
当我将文本文件中的大量数据加载到数据表/数据网格中时,也遇到了类似的问题。我加载的许多数据无法轻松键入,因为这些文件来自许多不同的来源,有很多变体,所以它们都只是作为文本列加载。我加载的很多数据只是一个字符长的
本文讨论了.NET中字符串的开销,以及它对一个字符的许多元素的影响。它提供了使用ANTs探查器的示例。我得到了试用版,并用它来确认我看到的用法。由于数据的变化,我无法调整我的列类型,但如果你发现你的数据列可以被键入为字符串以外的其他类型,那么你可能会发现一些显著的改进。
也许您可以实现某种分页或"按需加载"?
当运行两次这个方法时,您会处理旧的数据表,不是吗?