Возникла необходимость периодической выгрузки большой таблицы (более 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 и записываю его в файл, а готовые среды пишут в режиме онлайн(не из дампа памяти).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ПодскажитеНа форме есть Datagridview, в ней к примеру 7 столбцов и неограниченное кол-во строк
Есть приложение построенное по патерну MVVMЕсть кнопка в главном окне приложения, которая вызывает команду