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();
                    }

SqlDataAdapter内存使用情况

当我将文本文件中的大量数据加载到数据表/数据网格中时,也遇到了类似的问题。我加载的许多数据无法轻松键入,因为这些文件来自许多不同的来源,有很多变体,所以它们都只是作为文本列加载。我加载的很多数据只是一个字符长的

本文讨论了.NET中字符串的开销,以及它对一个字符的许多元素的影响。它提供了使用ANTs探查器的示例。我得到了试用版,并用它来确认我看到的用法。由于数据的变化,我无法调整我的列类型,但如果你发现你的数据列可以被键入为字符串以外的其他类型,那么你可能会发现一些显著的改进。

也许您可以实现某种分页或"按需加载"?

当运行两次这个方法时,您会处理旧的数据表,不是吗?