Куча больших объектов с XML-документами - PullRequest
1 голос
/ 18 июля 2009

Вероятно, это похоже на .NET коллекций и кучу больших объектов (LOH)

В .Net я загружаю XmlDocument со строкой, которая составляет ~ 200 КБ текстового документа при преобразовании xml в base64. Дело в том, что строка должна быть размещена в куче больших объектов. Из приведенных здесь сравнений я знаю, что XmlReader является наиболее эффективным способом чтения строки, но XmlDocument, вероятно, дает мне более прямолинейное чтение с большей функциональностью (xpath).

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

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

Ответы [ 2 ]

3 голосов
/ 18 июля 2009

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

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

1 голос
/ 18 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...