Экспорт большой таблицы из БД на C#

96
07 марта 2022, 16:50

Возникла необходимость периодической выгрузки большой таблицы (более 7млн строк) из базы данных в CSV. Если делать это инструментами экспорта из какой-нибудь среды типа Aqua DataStudio или PostgreSQL, то экспорт занимает 2-3 минуты. Я написал программу, которая экспортирует результат в csv, но она потребляет больше 2ГБ ОЗУ и работает больше 15 минут. Что можно попробовать для оптимизации? Код прилагаю. Спасибо!

 public void RecordFile(DataTable dt)
    {//Запись данных в csv
        //Шапка
        StreamWriter swc = new StreamWriter("C:\test.csv", false, Encoding.GetEncoding(1251));
        var columns = dt.Columns.Cast<DataColumn>();
        swc.WriteLine(string.Join(";", columns));
        swc.Close();
        //Строки
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            StreamWriter sw = new StreamWriter("C:\test.csv", true, Encoding.GetEncoding(1251));
            sw.WriteLine(string.Join(";", dt.Rows[i].ItemArray));
            sw.Close();
            Application.DoEvents();
        }
        dt.Clear();
    }

Я так понимаю, что основная проблема в размещении данных. Я помещаю весь массив в DataTable и записываю его в файл, а готовые среды пишут в режиме онлайн(не из дампа памяти).

READ ALSO
Работа с таблицей DataGridview C#

Работа с таблицей DataGridview C#

ПодскажитеНа форме есть Datagridview, в ней к примеру 7 столбцов и неограниченное кол-во строк

156
Модальные окна и MVVM

Модальные окна и MVVM

Есть приложение построенное по патерну MVVMЕсть кнопка в главном окне приложения, которая вызывает команду

140
Работа переменной Random [дубликат]

Работа переменной Random [дубликат]

Есть массив который заполняется образцами данного класса :

148
ОШИБКА 400 BAD REQUEST

ОШИБКА 400 BAD REQUEST

Всем привет! Я запускаю сайт Aspnet framework на iis сервере

72