Я действительно боролся с этой проблемой. Я пишу программу, которая обрабатывает большие объемы данных, размещенных на сервере в базе данных SQL. В таблице, содержащей 50 столбцов, миллионы записей.
Первое, что делает моя программа, — это выполняет запрос для получения набора этих данных. Размер набора может варьироваться от 500 записей до 1,5 миллиона. 1,5 миллиона — это довольно редко, но бывает. В настоящее время я извлекаю данные и сохраняю их в DataTable, а затем использую EPPlus для экспорта в Excel. У меня начинает заканчиваться память около 150 000 записей. На выполнение всей задачи уходит около 2-3 минут. Я считаю, что мне не хватает памяти при заполнении моей таблицы данных.
Данные находятся на сервере в базе данных SQL, и у нас должен быть экспортированный файл Excel на нашу локальную машину. Эти критерии должны соблюдаться и впредь.
Как же мне это сделать?
Изменить: вот пример кода. Я также должен обновить, что меня не волнует форматирование.
string query = "SELECT * FROM DB.dbo.Table WHERE [Client Name] = '" + clientName + "'";
System.Data.DataTable dt = new System.Data.DataTable();
using (SqlConnection sqlConn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand(query, sqlConn))
{
sqlConn.Open();
using (SqlDataReader myReader = cmd.ExecuteReader())
{
dt.Load(myReader);
sqlConn.Close();
}
}
}
Я думаю, мне нужно внести коррективы в более широкую картину вещей. Как многие из вас говорили, невозможно обработать такое количество строк. Я собираюсь рассмотреть другой подход к проблеме в целом. Спасибо за вашу помощь всем!