2

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

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

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

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

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

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

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

你还有其他建议吗?

谢谢

4

3 回答 3

2

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

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

(没有一个 protobuf 实现被认为是生产就绪的,但有几个已经接近了。我们需要测试人员!)

于 2008-10-09T14:54:23.980 回答
1

重新 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 服务......

于 2008-10-09T15:50:31.230 回答
0

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

于 2008-10-09T17:15:57.750 回答