2016-01-20 2 views
-1

У нас есть приложение, которое экспортирует очень длинные файлы CSV, от тысяч до миллионов строк. Мы используем StringBuilder и множество .Appends для создания файла, и это заканчивается из памяти около 500 000 строк. StringWriter основан на StringBuilder и не работает в той же точке моих тестов.SOLVED: StringBuilder из памяти, альтернативы?

У MemoryStream (или Tributary) не должно быть никаких проблем с файлом, это большой, но его API основан на байте []. Я знаю I can convert, но это делает код несколько (лот?) Более трудным для чтения.

Есть более простое решение для написания нескольких строк в потоке, что я не хватает, или, возможно, чистый способ реализации такой функциональности

+5

Вам действительно нужно иметь все данные в памяти, почему бы вам не написать его прямо в файл, который вы экспортируете? – Joni

+1

Как я понимаю, при добавлении в строку и, таким образом, превышая максимальную емкость, 'StringBuilder' попытается удвоить емкость, когда закончится« комната », прежде чем она« опустится »для того, чтобы удерживать текущую строку плюс добавление. Моя догадка заключается в том, что попытка удвоения - это ошибка вашей ошибки. 'StringBuilder' имеет свойство« Capacity ». Если вы знаете приблизительный размер, который вам нужен, установите его так, чтобы он не делал эти изменения в памяти. – Jeroen

+0

Заставить приложение работать как 64-разрядное приложение и использовать Framework 4.5. Вот SE, который может помочь: http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 – JerryM

ответ

0

Просто так есть некоторое замыкание на это (расширение возможно?): Марк Ответ был тем, кого я искал. Создавая поток, используя StreamWriter, он работает. StringWriter не работает. У меня все еще есть некоторые проблемы с кодировкой, но они незначительны по сравнению.

 Смежные вопросы

  • Нет связанных вопросов^_^