Member 9700867 Ответов: 2

Проблема с памятью при извлечении записи 25 лакхов из Mysql и импорте в CSV файл


Привет
Я извлекаю 25 лакхов (250 000) записей из моего sql, и эти записи имеют 5 столбцов в таблице..
извлеченные записи импортируются в CSV-файл...
для 6 или 7 лакхов записывает его извлечение и экспортирует в csv-файл..

но для более чем 20 лакхов записей его выбрасывание системы из памяти исключение..

я использую этот код для экспорта записей в CSV...

public static void ExportDataTableToCSV(DataTable dt, string FileName, string Heading, HttpResponse objResponse)
      {
          System.Text.StringBuilder sb = new System.Text.StringBuilder();
          sb.AppendLine(Heading);
          string[] columnNames = dt.Columns.Cast<DataColumn>().
                                            Select(column => column.ColumnName).
                                            ToArray();
          sb.AppendLine(string.Join(",", columnNames));

          foreach (DataRow row in dt.Rows)
          {
              string[] fields = row.ItemArray.Select(field => field.ToString().Replace(',',' ')).
                                              ToArray();
              sb.AppendLine(string.Join(",", fields));
          }
          objResponse.Write(sb.ToString());
          objResponse.ContentType = "application/CSV";
          objResponse.AddHeader("content-disposition", "attachment; filename="+FileName+".CSV");
          objResponse.Flush();
          objResponse.End();
      }



Моя проблема заключается в том, что я не могу получить огромное количество записей, таких как 25 лакхов из mysql и

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

Есть ли какой-либо вариант заполнить данные с помощью методов json или любых других методов..пожалуйста, предложите мне некоторые ответы...

Im импортирует 90 МБ данных из базы данных...

BillWoodruff

Сколько у тебя памяти ?

Member 9700867

90 МБ...

Member 9700867

90 МБ и 25 лакхов записи...

Mohibur Rashid

В английском языке нет такого слова, как Lakhs. Вы хотели сказать 2500,000

Hrishikesh

ПРОСТО К ТВОЕМУ СВЕДЕНИЮ:
https://en.oxforddictionaries.com/definition/lakh

NotPolitcallyCorrect

Просто к твоему сведению. Перевод индийского слова на английский не делает его английским. Лакх-индиец, а не англичанин.

Richard MacCutchan

Вы когда-нибудь слышали о законах физики? Вы не можете просто прочитать любой объем данных в память и ожидать, что ваше приложение будет работать без проблем. Разбейте его на управляемые части и обрабатывайте небольшие количества за один раз.

Hrishikesh

Это слово было добавлено в словарь с использованием санскритского языка в качестве ссылки на перевод, присутствие которого в Оксфордском словаре делает его английским словом. Английский язык имеет большую часть своего языка, производного от греческого и латинского. Итак, мой друг английский-это развивающийся язык. Кроме того, рекомендации веб-сайта довольно ясны, что не у всех основной язык-английский, поэтому джентльмен, который пытается исправить свой язык, должен попытаться помочь ему в этом вопросе, чем исправить язык других.

Mohibur Rashid

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

2 Ответов

Рейтинг:
0

BillWoodruff

Используйте StreamWriter в блоке using и запишите каждую строку в CSV-файл [^] вместо того, чтобы пытаться заполнить StringBuilder всеми данными строк.


Рейтинг:
0

E.F. Nijboer

Зачем использовать StringBuilder?

Вместо

sb.AppendLine(string.Join(",", fields));


Пишите в ответ напрямую:
objResponse.Write(string.Join(",", fields));


Удачи!


Member 9700867

привет Э. Ф. Nijboer...im экспорт 25 лакхов записей..но когда я использую этот код, только последняя запись экспортируется в excel..вот почему я использовал string builder..

E.F. Nijboer

Возможно, вам нужно сначала вызвать AddHeader и ContentType. Вам также не нужно явно использовать End, потому что он реализован только для классической совместимости asp.

E.F. Nijboer

Возможно, вам придется использовать OutputStream.Писать. Проверьте эту ссылку для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.outputstream%28v=vs.110%29.aspx