1

我有一个将 1500,000 加载到网格的应用程序。问题是它需要大量内存。(1.8 GB)

我观察到以下,

  • 如果我在 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();
                    }
4

2 回答 2

1

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

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

于 2011-06-28T04:47:38.547 回答
0

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

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

于 2011-06-28T04:59:19.633 回答