Как прочитать удаленный XML-файл наиболее эффективно? - PullRequest
2 голосов
/ 09 октября 2008

Я разрабатываю небольшое приложение, которое извлекает файл XML, расположенный на удаленном сервере (http://xxxx.com/myfile.xml) Этот файл является относительно большим, и он содержит большой список геолокации с другой информацией, которую мне нужно использовать для моего приложения. Поэтому я один раз прочел этот файл удаленно и вставил его в маленький файл SqlCE (database.sdf)

Так что, если мне нужен доступ к геолокации # 1, я просто сделаю оператор SELECT в эту БАЗУ ДАННЫХ вместо загрузки всего XML-файла каждый раз.

Но я хотел бы знать, возможно ли это сделать без использования файлов .sdf?

Какой самый эффективный способ (самый быстрый)?

Сохранение большого XML-файла один раз локально и загрузка, если каждый раз, когда я запускаю свое приложение, чтобы загрузить его в набор данных? это делает приложение немного длинным для загрузки каждый раз

Локальное сохранение большого XML-файла и чтение узлов один за другим для поиска геолокации # 1?

Или можно напрямую получить геолокацию # 1 из удаленного xml (http://xxxx.com/myfile.xml) без чтения всего файла?

У вас есть другие идеи?

спасибо

Ответы [ 3 ]

2 голосов
/ 09 октября 2008

Загрузите большой XML-файл, преобразуйте его в соответствующую другую структуру данных, сохраните его в файл в эффективном формате. (XML действительно не очень эффективен.)

Мне кажется, Протоколные буферы Марка Гравелла Реализация работает на Compact Framework ...

(Ни одна из реализаций protobuf не считается готовой к производству, но пара близка. Нам нужны тестеры!)

1 голос
/ 09 октября 2008

Re protobuf-net, пока нет отдельной загрузки для версии CF, но в исходном коде есть csproj для CF 2.0 и CF 3.5.

уточнить по вашему вопросу; на самом деле protobuf-net даже не использует файл .proto (на данный момент); Файл .proto просто описывает, что это за данные - protobuf-net просто смотрит на ваши классы и выводит из этого схему (аналогично тому, как работает XmlSerializer / DataContractSerializer и т. д.). Так что - это , а не .proto - только классы, которые выглядят как ваши данные.

Однако, прежде чем приступить к созданию классов, похожих на ваши данные, я хотел бы знать, не могли бы вы просто использовать GZIP или [PK] ZIP для сжатия данных и передачи их «как есть». XML обычно сжимает очень хорошо. Конечно, проблема заключается в поиске реализации GZIP (и т. Д.) Для CF.

Конечно, если вы захотите использовать здесь protobuf-net, я с радостью посоветую и т. Д., Если возникнут проблемы ...

Другой вариант - приложение CF для вызова веб-службы, которая локально хранит данные ...

0 голосов
/ 09 октября 2008

Зачем вам вытягивать весь файл на устройство CE для этого? Это бесполезная трата пропускной способности, и, безусловно, поиск встроенного процессора будет на намного медленнее, чем на сервере, независимо от формата хранения. У вас должна быть служба (Web, WCF или любая другая), которая позволяет запрашивать у вас единственную геолокацию, которую вы хотите.

...