我正在开发一个小应用程序,检索XML文件,位于远程服务器(http://xxxx.com/myfile.xml)这个文件是相对较大的,它包含了我的应用程序需要使用的其他信息的地理位置的大列表。因此,我远程读取了这个文件一次,并将其插入到一个小SqlCE文件(database.sdf)中
因此,如果我需要访问geolocation #1,我将只对这个数据库执行一条SELECT语句,而不是每次都加载整个XML文件。
但是我想知道有没有可能在不使用.sdf文件的情况下做到这一点?
什么是最有效的方法(最快)?
在本地保存一次大的XML文件,并在每次启动应用程序将其加载到数据集中时加载它?这将使应用程序在每次加载时都会有点长
在本地保存一次大的XML文件,然后逐个读取节点以查找地理位置#1?
或者,是否可以直接从远程xml (http://xxxx.com/myfile.xml)检索geolocation #1,而无需读取整个文件?
你还有其他的想法吗?
谢谢
发布于 2008-10-09 15:50:31
Re protobuf-net,目前没有针对CF版本的单独下载,但在CF2.0和CF3.5的源代码中都有一个csproj。
为了澄清您的问题,实际上protobuf-net (目前)甚至没有使用.proto文件;.proto文件只是描述数据是什么- protobuf-net只是查看您的类并从中推断出模式(类似于XmlSerializer / DataContractSerializer等的工作方式)。所以没有.proto --只有看起来像你的数据的类。
但是,在开始创建看起来像您的数据的类之前,我想知道您是否不能简单地使用GZIP或PKZIP来压缩数据,并“按原样”传输数据。Xml通常可以很好地压缩。当然,为CF找到一个GZIP (etc)实现就成了问题。
当然,如果你想在这里使用protobuf-net,如果你遇到问题,我很乐意建议etc……
另一种选择是让您的CF应用程序调用具有本地数据的web服务……
发布于 2008-10-09 14:54:24
加载大的XML文件,将其转换为适当的不同数据结构,并以有效的格式将其保存到文件中。(XML实际上效率不是很高。)
我相信Marc Gravell's Protocol Buffers实现可以在紧凑的框架上工作……
(没有一个protobuf实现被认为是可以投入生产的,但有几个已经接近了。我们需要测试人员!)
发布于 2008-10-09 17:15:58
为什么要将整个文件下载到CE设备上呢?这是一种带宽浪费,而且无论存储格式如何,在嵌入式处理器上进行查找肯定会比在服务器上进行查找慢得多。你应该有一个服务(Web,WCF或其他任何东西),允许你向它请求你想要的单一地理位置。
https://stackoverflow.com/questions/187576
复制相似问题