Мне нужно проанализировать xml-файл, который практически является изображением действительно большой древовидной структуры, поэтому я использую класс XmlReader для заполнения дерева «на лету». Каждому узлу передается только тот кусок XML, который он ожидает от своего родителя через функцию ReadSubtree (). Преимущество этого состоит в том, что вам не нужно беспокоиться о том, когда узел использует все свои дочерние элементы. Но теперь мне интересно, действительно ли это хорошая идея, поскольку может быть тысячи узлов, и, читая исходные файлы .NET, я обнаружил, что пара (и, возможно, больше) новых объектов создается при каждом вызове ReadSubtree, и кеширование повторно используемых объектов не производится (что я видел).
Возможно, считалось, что ReadSubtree () не использовался в массовом порядке, или, может быть, я просто беспокоясь, и мне просто нужно вызвать GC.Collect () после анализа файла ...
Надеюсь, что кто-то может пролить свет на это.
Заранее спасибо.
Обновление:
Спасибо за приятные и проницательные ответы.
Я глубже изучил исходный код .NET и обнаружил, что он более сложный, чем я мог себе представить. Я наконец отказался от идеи вызова этой функции в этом самом сценарии. Как отметил Стефан, xml-ридер никогда не передается посторонним, и я могу доверять коду, который анализирует xml-поток (который написан мной), поэтому я бы предпочел заставить каждый узел отвечать за объем данных, который они украсть из потока, чем использовать не очень тонкую в конце функцию ReadSubtree (), чтобы просто сохранить несколько строк кода.