Обработка большого XML-файла в SQL Server с помощью C # - PullRequest
0 голосов
/ 05 ноября 2010

Во-первых, то, что я опишу здесь, является небольшой частью более крупного процесса ETL, который уже существует.Поэтому, пожалуйста, не предлагайте перенести в SSIS или другую среду, потому что я не могу.

В этом процессе ETL для каждой таблицы в базе данных SQL-сервера, в которую вставляется, я:

  1. загрузка всех соответствующих xml в объект XElement
  2. , затем преобразование xml в типизированный набор данных datatable
  3. , затем использование объекта SqlBulkCopy для быстрой вставки данных в sqlтаблица сервера.

Но для одной таблицы при создании XElement я получаю исключение OutOfMemory.

Итак, теперь мне нужно итеративно обрабатывать данные порциями, но я не уверен, что это лучший способ сделать это.XML-файл хранится на том же компьютере, на котором выполняется процесс ETL.

Спасибо за любую помощь.

ОБНОВЛЕНИЕ

Я начинаю читать о классе XmlReader, который я никогда не использовал.Если кто-то думает, что это ответ, скажите, пожалуйста, и предоставьте любые рекомендации.

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Не используйте XmlElement - используйте синтаксический анализатор .NET SAX для анализа потока XML.НИКОГДА не материализуйте объекты в памяти.Просто.Для этого есть API.

В основном используйте XmlTextReader.

0 голосов
/ 24 мая 2012

В дополнение к простому использованию XmlReader может быть полезно узнать о методе XNode.ReadFrom .Это работает особенно хорошо, если XML больше похож на очень длинный список сущностей, а не на глубоко вложенную иерархию.

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