очень большая строка в памяти

Я пишу программу для форматирования 100 с Строковых данных МБ (приближающийся к концерту) в xml ==, И я обязан возвращать его, поскольку ответ на HTTP (ПОЛУЧАЕТ) запрос.

Я использую StringWriter/XmlWriter для создания XML записей в цикле и возврате

using (StringWriter writer = new StringWriter())
using (writer = XmlWriter.Create(writer, settings)) //where settings are the xml props

writer.ToString() 

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

существует ли память эффективный способ закодировать данные? или возможно разделяя данные на блоки - я просто не могу думать, как возвратить их, не встраивая все это в один ОГРОМНЫЙ строковый объект

спасибо

- несколько разъяснений - это - asp приложение веб-сервисов .NET по ссылке Gigabit Ethernet как отмеченная добродушная шутка. Я не очень знаком с ним так все еще определенная кривая обучения.

Я использую XMLWriter, чтобы создать XML и создать строку из него с помощью Строки

некоторая статистика - ответ xml размер = приблизительно 385 megs (мой размер данных вырастит очень быстро к пути больше, чем это),

представьте размер объекта в виде строки, как вычислено профилировщиком памяти =, достиг максимума на уровне 605 МБ

и благодаря всем, кто ответил...

10
задан bushman 17 May 2010 в 04:48
поделиться

5 ответов

Нельзя ли просто передать ответ клиенту? XmlWriter не требует, чтобы его базовый поток буферизировался в памяти. Если это ASP.NET, вы можете использовать Response.OutputStream или если это WCF, вы можете использовать потоковую передачу ответа.

5
ответ дан 3 December 2019 в 20:40
поделиться

HTTP получить за 1 гиг? это много! Возможно, вам стоит пересмотреть свое мнение. По крайней мере, сжатие вывода может помочь.

2
ответ дан 3 December 2019 в 20:40
поделиться

Вам придется возвращать каждую запись (или небольшую группу записей) в их собственных индивидуальных GET.

1
ответ дан 3 December 2019 в 20:40
поделиться

Вы не должны создавать XML, используя манипуляции со строками.

Вместо этого вы должны использовать классы XmlTextWriter , XmlDocument или (в .Net 3.5) XElement для построения XML-дерева в памяти, затем написать он напрямую в Response.OutputStream , используя XmlTextWriter .

Запись непосредственно в XmlTextWriter , который обертывает Response.OutputStream , будет наиболее эффективной (у вас никогда не будет в памяти целого дерева элементов сразу), но будет несколько больше сложный.

Поступая таким образом, у вас никогда не будет ни одной строки (или массива), содержащей весь объект, и поэтому следует избегать OutOfMemoryExceptions.

2
ответ дан 3 December 2019 в 20:40
поделиться

Используйте XmlTextWriter, обернутый вокруг Reponse.OutputStream для отправки XML клиенту и периодической промывки ответа. Таким образом, вам никогда не придется держать в памяти более нескольких мегабайт в каждый момент времени (по крайней мере, для отправки клиенту).

6
ответ дан 3 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: