Использование памяти SqlDataAdapter - PullRequest
1 голос
/ 28 июня 2011

У меня есть приложение, которое загружает 1500000 в сетку. Проблема в том, что это занимает много памяти. (1,8 ГБ)

Я заметил следующее,

  • Тот же запрос, если я запускаю SQL-запрос Анализатор занимает около 60 МБ
  • В приложении, если я просто выполню ExecuteNonQuery () также принимает где-то около 60 МБ.

Проблема возникает, когда я выполняю ее, чтобы получить вывод в виде 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 ]

1 голос
/ 28 июня 2011

Я столкнулся с подобной проблемой при загрузке большого количества данных из текстовых файлов в таблицы данных / таблицы данных. Большая часть данных, которые я загружаю, не может быть легко напечатана, поскольку файлы поступают из разных источников с большим количеством вариантов, поэтому все они просто загружаются в виде текстовых столбцов. Большая часть данных, которые я загружаю, просто одна длина символа

В этой статье рассматриваются издержки строк в .NET и влияние, которое это оказывает на множество элементов, состоящих только из одного символа. Приводятся примеры использования профилировщика ANTs. Я получил пробную версию и использовал ее, чтобы подтвердить использование, которое я видел. Из-за различий в данных, которые у меня были, я не смог настроить типы столбцов, но если вы обнаружите, что у вас есть столбцы данных, которые можно вводить как что-то отличное от строки, то вы можете обнаружить некоторые существенные улучшения.

0 голосов
/ 28 июня 2011

Может быть, вы можете реализовать какой-то вид пейджинга или «нагрузку по требованию»?

Когда вы запускаете этот метод дважды, вы удаляете старые данные, не так ли?

...