В приложении на Visual C++ с MFC использую чтение/запись xml-файлов при помощи парсера MSXML. При значительном количестве записываемых данных скорость обработки файла очень мала
Список из 3000 элементов записывается/читается из файла приблизительно за 20 сек.
Подскажите, пожалуйста — что можно сделать?
Можно ли использовать другой парсер? Или вообще отказаться от использования xml в данном случае? Допустимое время — на порядок меньше.
Здравствуйте, Udovitsky, Вы писали:
U>Подскажите, пожалуйста — что можно сделать? U>Можно ли использовать другой парсер? Или вообще отказаться от использования xml в данном случае? Допустимое время — на порядок меньше.
Отказаться от DOM-модели, использовать SAX-модель.
Здравствуйте, Udovitsky, Вы писали:
U>И действительно время обработки будет на порядок меньше?
Для многих приложений — да. Ведь при чтении XML-файла в модели DOM создаётся довольно громоздкое дерево. В модели SAX объём обработки определяется приложением, и зачастую может быть минимален.
Однако в некоторых областях модель SAX неприменима.
A>Однако в некоторых областях модель SAX неприменима.
Понятно. Спасибо. Похоже это как раз мой случай.
У меня до открытия окна этот файл должен быть полностью прочитан и проанализирован. Как я понял, в данном случае использовать xml — это однозначно в ущерб производительности. Возвращаюсь к бинарному файлу.
Здравствуйте, Udovitsky, Вы писали:
U>Понятно. Спасибо. Похоже это как раз мой случай. U>У меня до открытия окна этот файл должен быть полностью прочитан и проанализирован. Как я понял, в данном случае использовать xml — это однозначно в ущерб производительности. Возвращаюсь к бинарному файлу.
Если Вас не интересует читабельность сериализуемых данных, тогда да — бинарник самое то. Если же интересует, то компутеры же не всегда будут такими медленными
Еще возможный вариант — воспользоваться ADO.NET и его сериализовать в xml и обратно — могет и побыстрее получится.
Здравствуйте, Udovitsky, Вы писали:
U>Понятно. Спасибо. Похоже это как раз мой случай. U>У меня до открытия окна этот файл должен быть полностью прочитан и проанализирован.
SAX-модель не исключает такой процедуры. Если заведомо известна структура данных (а она известна, судя по тому, что рассматривается альтернатива в виде бинарного файла), можно считать файл, заставляя SAX-обработчики "распихивать" данные во внутренние структуры: это намного менее затратно, чем построение DOM-дерева, не накладывающего ограничений на структуру данных.