2009-07-17 2 views
1

Это, вероятно, вдоль линий .NET Collections and the Large Object Heap (LOH)Большой вороха объектов с Xml документов

В .NET, я загрузке XmlDocument с строкой, которая делает ~ 200Kb текстовый документ, когда XML преобразуется в base64. Суть в том, что строка должна быть выделена для большой кучи объекта. Я знаю из чтения сравнения здесь, что XmlReader является наиболее эффективным способом чтения строки, но XmlDocument, вероятно, дает мне более прямое чтение с большей функциональностью (xpath).

Каждый узел моего XML должен быть довольно маленькой строкой, ничто не близко к заголовку большой кучи объекта. Используя Lutz .Net Reflector, похоже, что XmlDocument использует связанные узлы внутри себя.

Итак, мой вопрос: будет ли загрузка этой строки, которая сохраняет ~ 200 КБ (> 85000 байт), вызывает еще один объект для LOH при использовании XmlDocument. Мы немного обеспокоены фрагментацией кучи и причиной ошибок OOM. Или просто возникает XmlDocument (по крайней мере, для случая, о котором я спрашиваю) создает много объектов для управляемой кучи?

ответ

1

Почему вы загружаете XML в строку для начала? Откуда берутся данные? Не можете ли вы передать это (например, Stream или TextReader) прямо в XmlDocument для начала?

+0

Строка поступает из базы данных. Мы создаем приложение вертикального рынка поверх платформы Microsoft Dynamics, поэтому использование полей данных другого типа не является для меня вариантом. –

+0

Чтобы быть более понятным, строка поступает из веб-службы Dynamics, которая вытащила ее из базы данных. –

+0

Если это происходит из веб-службы, вы получаете ее в HTTP-запросе? Если у вас есть контроль над этим, вы можете передать результат - если нет, вы в основном намерены иметь эту строку 200K в памяти в любом случае. –

3

Это только объект непрерывных данных, размер которого превышает 85 КБ, который попадает в кучу больших объектов. Например, большие строки и массивы с десятью тысячами элементов.

XmlDocument состоит из множества мелких объектов, поэтому он очень редко выделяет что-либо на кучу больших объектов. Единственный шанс для этого состоит в том, что узел содержит десятки тысяч детей, или если значение больше 42500 символов.

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