2008-10-09 7 views
2

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

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

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

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

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

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

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

Есть ли у вас какие-либо другие идеи?

благодаря

ответ

1

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

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

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

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

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

+0

Большое спасибо за информацию. На самом деле скорость - моя самая большая проблема, а не размер (скорость загрузки приложения и извлечение геолокации #X из файла). И из того, что я читал на выступлениях, protobuf-net должен сделать трюк. PS: Я использую CF.NET 3.5, – guigui42 2008-10-09 16:00:09

2

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

Я считаю, что Marc Gravell's Protocol Buffers реализации работает на Compact Framework ...

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

+0

Спасибо, это кажется интересным. Но я не могу найти версию Compact Framework (только найдено 2/3/Silver). Итак, если я правильно понял, этот «Протокол буферов» используется для кодирования структурированных данных в файл «.prot»? Но тогда это означало бы, что мне все равно придется загружать этот .prot-файл каждый раз, когда я запускаю приложение? – guigui42 2008-10-09 15:36:41

+0

Протокол Buffers - это в основном бинарный протокол сериализации. Да, вам нужно будет загрузить файл, но он будет небольшим (PB эффективен в пространстве) и быстрым (парсеры PB эффективны во времени). Если вам не захочется сменить саму сборку, вам придется загружать данные откуда-то! – 2008-10-09 16:05:11

0

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

Смежные вопросы