我正在开发一个小应用程序来检索位于远程服务器上的XML文件(http://xxxx.com/myfile.xml) 这个文件比较大,它包含一个很大的地理定位列表,其中包含我需要用于我的应用程序的其他信息。 所以我远程读取这个文件并将其插入一个小的SqlCE文件(database.sdf)
所以如果我需要访问geolocation#1,我只会在这个DATABASE中创建一个SELECT语句,而不是每次都加载整个XML文件。
但我想知道是否可以在不使用.sdf文件的情况下执行此操作?
最有效的方法是什么(最快)?
在本地保存一次大型XML文件并在每次启动我的应用程序时将其加载到数据集中?这会使应用程序每次加载都有点长
在本地保存一次大型XML文件并逐个读取节点以查找地理位置#1?
或者是否可以直接从远程xml(http://xxxx.com/myfile.xml)检索地理定位#1而不读取整个文件?
你还有其他想法吗?
感谢
答案 0 :(得分:2)
加载大型XML文件,将其转换为适当的不同数据结构,以高效格式将其保存到文件中。 (XML确实效率不高。)
我相信Marc Gravell's Protocol Buffers实施适用于Compact Framework ......
(没有一个protobuf实现被认为是生产就绪的,但是一对已经接近了。我们需要测试人员!)
答案 1 :(得分:1)
Re 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服务...
答案 2 :(得分:0)
为什么要将整个文件下载到CE设备?这是一个带宽浪费,当然,无论存储格式如何,在嵌入式处理器上进行查找都会比服务器上的方式慢。您应该有一个服务(Web,WCF或其他),它允许您询问它所需的单个地理位置。