【问题标题】:How to read remote XML file the most efficiently way?如何以最有效的方式读取远程 XML 文件?
【发布时间】:2008-10-09 14:43:19
【问题描述】:

我正在开发一个小应用程序来检索位于远程服务器上的 XML 文件 (http://xxxx.com/myfile.xml) 这个文件比较大,它包含一个很大的地理位置列表以及我需要用于我的应用程序的其他信息。 所以我远程读取了这个文件一次并将其插入到一个小的 SqlCE 文件(database.sdf)中

所以如果我需要访问地理位置 #1,我只需在这个 DATABASE 中创建一个 SELECT 语句,而不是每次都加载整个 XML 文件。

但我想知道是否可以在不使用 .sdf 文件的情况下做到这一点?

什么是最有效(最快)的方式?

在本地保存一次大 XML 文件并在每次我启动我的应用程序以将其加载到数据集中时加载?这会使应用每次加载都会有点长

在本地保存一次大 XML 文件并逐个读取节点以查找地理位置 #1 ?

或者是否可以直接从远程 xml (http://xxxx.com/myfile.xml) 检索地理位置 #1 而无需读取整个文件?

您还有其他想法吗?

谢谢

【问题讨论】:

    标签: c# xml compact-framework sdf sql-server-mobile


    【解决方案1】:

    加载大 XML 文件,将其转换为适当的不同数据结构,以有效格式保存到文件中。 (XML 真的不是很高效。)

    我相信 Marc Gravell's Protocol Buffers 的实现适用于 Compact Framework...

    (目前还没有一个 protobuf 实现被认为可以投入生产,但有几个已经接近。我们需要测试人员!)

    【讨论】:

    • 谢谢,这看起来很有趣。但我找不到 Compact Framework 版本(仅找到 2/3/Silver)。所以如果我理解得很好,这个“协议缓冲区”用于将结构化数据编码为“.prot”文件?但是这意味着我每次启动应用程序时仍然需要加载这个 .prot 文件?
    • Protocol Buffers 基本上是一个二进制序列化协议。是的,您需要加载文件 - 但它会很小(PB 在空间上很有效)并且速度很快(PB 解析器在时间上很有效)。除非您想更改程序集本身,否则您将不得不从某个地方加载数据!
    【解决方案2】:

    重新protobuf-net,CF版本暂时没有单独下载,但是CF 2.0和CF 3.5的源码中都有一个csproj。

    澄清您的问题;实际上 protobuf-net 甚至不使用 .proto 文件(目前); .proto 文件仅描述数据是什么 - protobuf-net 仅查看您的类并从中推断架构(类似于 XmlSerializer / DataContractSerializer 等的工作方式)。所以不是.proto - 只是看起来像你的数据的类。

    但是,在您着手创建看起来像您的数据的类之前,我想知道您是否不能简单地使用 GZIP 或 [PK]ZIP 来压缩数据并“按原样”传输它。 Xml 一般非常压缩得很好。当然,为 CF 找到 GZIP(等)实现就成了问题。

    当然,如果您在这里使用 protobuf-net,如果您遇到问题,我会很乐意为您提供建议...

    另一种选择是让您的 CF 应用调用在本地拥有数据的 Web 服务...

    【讨论】:

    • 非常感谢您提供的信息。实际上,速度是我最关心的问题,而不是大小(加载应用程序和从文件中检索地理位置#X 的速度)。从我读到的表演来看,protobuf-net 应该可以解决问题。 PS:我使用的是 CF.NET 3.5,
    • 很好; CF 3.5 版本有一些 CF 2.0 版本无法使用的优化(与委托有关)。
    • 到目前为止...我喜欢 ProtoBuf ...到目前为止我只在我的桌面上进行测试,但它非常易于使用(以 SVN Trunk 中的示例为例)。我仍然必须尝试使用​​ CF.NET,但它似乎正是我所需要的。干得好!
    • 我很高兴你的进展顺利。如果您有任何问题,请通过电子邮件(我很容易找到...)或通过 PB 网站给我留言。
    【解决方案3】:

    为什么要为此将整个文件下载到 CE 设备?这是一种带宽浪费,并且无论存储格式如何,在嵌入式处理器上进行查找肯定会比在服务器上慢方式。你应该有一个服务(Web、WCF 或其他),允许你向它询问你想要的单一地理位置。

    【讨论】:

    • 是的,我希望有一个网络服务...但是 XML 文件不是我生成的,它来自第三方。因此,在他们创建 Web 服务之前,我一直坚持使用该解决方案。但是协议缓冲区是迄今为止我尝试过的最好的选择(比 sdf 文件或每次解析 xml 都快)
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多