Исключение нехватки памяти при записи из SQL в csv
У меня есть большая БД ( более 10 м) , если она слишком велика, я получаю исключение из памяти .
Я хотел бы знать, как я могу подтвердить, что сколько строк может поддерживать мое приложение в зависимости от размера оперативной памяти .
Что я уже пробовал:
Я попробовал до 8M строк, и это выглядит хорошо, но помимо этого он выдает исключение из памяти.
Mehdi Gholam
Покажите свой код, его трудно комментировать без контекста (csv-это текстовый файл, и вы можете буферизировать запись в него, а также пакетное чтение из sql), поэтому вы не должны попадать в ограничения памяти.
prashant190
Пожалуйста , найдите фрагмент кода, еще один момент, который я хотел бы упомянуть, это то, что у меня было требование отображать результаты также в сетке, если это необходимо, и colomns должен быть показан на основе конфигурационного файла .
Ниже функция заботится о записи в CSV из DV
try { string outputFile = ConfigurationManager.AppSettings["csvFileName"].ToString(); outputFile = CSVFilePATH + "\\" + outputFile ; if (dataView.RowCount > 0) { string value = ""; DataGridViewRow dr = new DataGridViewRow(); StreamWriter swOut = new StreamWriter(outputFile); //write header rows to csv for (int i = 0; i <= dataView.Columns.Count - 1; i++) { if (!names.Contains(dataView.Columns[i].Name)) { if (i > 0) { swOut.Write(","); } swOut.Write(dataView.Columns[i].HeaderText); } } swOut.WriteLine(); //write DataGridView rows to csv for (int j = 0; j <= dataView.Rows.Count - 1; j++) { if (j > 0) { swOut.WriteLine(); } dr = dataView.Rows[j]; for (int i = 0; i <= dataView.Columns.Count - 1; i++) { if (!names.Contains(dataView.Columns[i].Name)) { if (i > 0) { swOut.Write(","); } try { value = dr.Cells[i].Value.ToString(); } catch { value = ""; } //replace comma's with spaces value = value.Replace(',', ' '); //replace embedded newlines with spaces value = value.Replace(Environment.NewLine, " "); swOut.Write(value); } } lblMessage.Text = "Downloaded file " + outputFile + " Successfully..."; } swOut.Close(); // dataView.Visible = false; } } catch (Exception exp) { Logger.Info("Exception during File Export..\r\n" + exp.Message.ToString()); }
Richard MacCutchan
Вы не можете загрузить все данные в память сразу. Считывайте только те строки, которые вам нужны для каждого запроса.