У нас есть приложение, которое экспортирует очень длинные файлы CSV, от тысяч до миллионов строк. Мы используем StringBuilder и множество .Appends для создания файла, и это заканчивается из памяти около 500 000 строк. StringWriter основан на StringBuilder и не работает в той же точке моих тестов.SOLVED: StringBuilder из памяти, альтернативы?
У MemoryStream (или Tributary) не должно быть никаких проблем с файлом, это большой, но его API основан на байте []. Я знаю I can convert, но это делает код несколько (лот?) Более трудным для чтения.
Есть более простое решение для написания нескольких строк в потоке, что я не хватает, или, возможно, чистый способ реализации такой функциональности
Вам действительно нужно иметь все данные в памяти, почему бы вам не написать его прямо в файл, который вы экспортируете? – Joni
Как я понимаю, при добавлении в строку и, таким образом, превышая максимальную емкость, 'StringBuilder' попытается удвоить емкость, когда закончится« комната », прежде чем она« опустится »для того, чтобы удерживать текущую строку плюс добавление. Моя догадка заключается в том, что попытка удвоения - это ошибка вашей ошибки. 'StringBuilder' имеет свойство« Capacity ». Если вы знаете приблизительный размер, который вам нужен, установите его так, чтобы он не делал эти изменения в памяти. – Jeroen
Заставить приложение работать как 64-разрядное приложение и использовать Framework 4.5. Вот SE, который может помочь: http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 – JerryM