SqlDataAdapter内存使用情况

时间:2011-06-28 04:38:29

标签: c# .net sqldataadapter

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

我观察了以下,

  • 如果我在SQL Query上运行,则查询相同 分析器需要大约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();
                    }

2 个答案:

答案 0 :(得分:1)

在将大量数据从文本文件加载到datatables / datagrids时,我遇到了类似的问题。我加载的很多数据都不能轻易输入,因为文件来自许多不同来源,有很多变化,所以它们都只是作为文本列加载。我加载的很多数据只是一个字符长

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

答案 1 :(得分:0)

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

当运行此方法两次时,您将丢弃旧数据表,不是吗?