当前位置:编程学习 > wap >>

技术分享 - Windows Phone 的数据存储方式总结

讨论范围:介于WindowsPhone8的SDK发布在即,出于文章时效的考虑,需要说明本文只讨论Windows Phone 7 下的数据存储方式,但我想内容同样适用于WindowsPhone8,只是WindowsPhone8会带来新的数据存储方式。


一、存储方式概览
本地项目内文件:被编译成资源文件(Resource)或内容(Content)。
独立存储(Isolated Storage)
本地数据库
Web Service/ WCF
Cloud/ Azure
二、详细介绍
1、本地项目内文件

可以通过设置文件的生成方式(BuildAction)将文件设置成资源(Resource)被编译到二进制代码里,优点是随时都能用,但是可能导致启动时加载过慢。在代码中,可以用Application.GetResourceStream来读取。一般用这几种场合:不考虑程序的启动时间;不用更新资源文件(因为编译进项目了就别指望了);减少程序的依赖项。  

可以通过设置文件的生成方式(BuildAction)将文件设置成内容(Content)被编译进项目文件,但不在二进制代码里,优点是效率高,能被多个程序包共用。在代码中,可以用XElement.Load来读取。一般用这几种场合:考虑程序的启动时间;需要更新资源文件(因为编译进项目了就别指望了)。

2、独立存储

如果要存储用户的数据,可以用独立存储,在Silverlight和WindowsPhon里都没有直接存储系统文件的接口,但是可以用独立存储将保存在用户的设备上。可以用键值对的方式(IsolatedStorageSettings类),也可以用文件的方式(IsolatedStorageFile类)

3、本地数据库

SQLCE:自己家的便携数据库格式,(7.1才有的)

SQLITE:第三方的便携数据库格式。

通过本人实际使用的感觉发现对多线程的读写处理都不怎么好,很容易异常,当然也可能我对其特性理解不够深入。

4、Web Service

可能有以下几种格式:

REST,POX,JSON,OData,SOAP。

而存取方式也有以下几种方式:

Http类:可以直接用HttpWebRequest或WebClient类来调用WebService,通过HTTP协议向WebService发送请求,得到xml或json格式的返回数据。

引用WCF服务:WCF其实是一个WebService框架,支持多种协议(包括http,tcp),支持多种格式(soap,xml,atom)

使用OData客户端: 其实也叫WCF数据服务,以前叫ADO.NET数据服务,一个以RSET形式存取现有数据的框架。WCF数据服务提供OData格式的数据,比如WindowsPhone与SharePoint交互时,SharePoint提供WCF数据服务,WCF数据服务处理所有http交互,序列化和其他的任务,意思是说App能直接通过http协议对远程数据执行増删改查,哪怕跨域也行。OData for WindowsPhone客户端可能在codeplex上找到

5、Azure

也可以用Windows Azure来存取数据,但是免费的服务是有限制的,Azure在云服务器上提供持久化的数据存储,操作方式和WebService差不多。

三、各种方式的适用场合
编译成资源文件将    只读数据嵌入二进制程序 
编译成内容文件      不用重新编译就能更新数据 
独立存储        存取用户信息 
http类              用第三方的REST或POX服务存取数据 
http类              获取RSS订阅 
用代理类的WCF       从SOAP服务存储数据   
WCF                 从Silverlight中将现有的类发布成服务 
OData             存取Odata数据 
Azure               存储大量数据 


时间问题,内容写的不是很深入,但希望对大家有帮助,如果有需要,我会补充具体代码 --------------------编程问答--------------------
LZ好人啊,谢谢。正学习中。 --------------------编程问答-------------------- 哈哈顶!继续加个精。 --------------------编程问答-------------------- 了解了~~~~~~ --------------------编程问答-------------------- 不错哦。不错哦………… --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- 非常感谢你啊 --------------------编程问答-------------------- 看不懂。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 非常感谢你啊 --------------------编程问答-------------------- 感谢分享 --------------------编程问答--------------------

总结的不错,补充一下。一些数据库也是可以存储的。 --------------------编程问答--------------------
引用 12 楼  的回复:
总结的不错,补充一下。一些数据库也是可以存储的。

已经写了,恍惚了,忽略此句 --------------------编程问答-------------------- 已经写了,恍惚了,忽略此句 --------------------编程问答-------------------- 看看分享 --------------------编程问答-------------------- 3 克油 --------------------编程问答-------------------- 学习ing --------------------编程问答-------------------- 做应用软件开发? --------------------编程问答-------------------- 好东西,Mark一下,以后学习 --------------------编程问答-------------------- 多谢楼主分享 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- phone 8 里面并没提到新的存储方式 --------------------编程问答-------------------- 留个信,期待WP8 SDK快点! --------------------编程问答-------------------- --------------------编程问答--------------------
引用 30 楼  的回复:
phone 8 里面并没提到新的存储方式


wp8可能会以某种方式支持外部存储,或者可能支持文件夹,但具体的形式还需验证 --------------------编程问答-------------------- 感谢分享,感谢上帝 --------------------编程问答-------------------- 感谢楼主的无私奉献
--------------------编程问答-------------------- thanks a lot --------------------编程问答-------------------- 不错,学习了 --------------------编程问答-------------------- 不错哦………… --------------------编程问答-------------------- 留个信,期待WP8 SDK快点! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 可是在我得到的sdk 8 developer preview的文档里面没有提到新的存储方式啊
引用 33 楼  的回复:
引用 30 楼 的回复:
phone 8 里面并没提到新的存储方式


wp8可能会以某种方式支持外部存储,或者可能支持文件夹,但具体的形式还需验证
--------------------编程问答--------------------
引用 42 楼  的回复:
可是在我得到的sdk 8 developer preview的文档里面没有提到新的存储方式啊

引用 33 楼 的回复:
引用 30 楼 的回复:
phone 8 里面并没提到新的存储方式


wp8可能会以某种方式支持外部存储,或者可能支持文件夹,但具体的形式还需验证


有支持外部SD卡,但目前只能只读方式 --------------------编程问答-------------------- 不错 准备入手wp --------------------编程问答-------------------- 不错,兄弟。 --------------------编程问答-------------------- thanks a lot --------------------编程问答--------------------
引用 44 楼  的回复:
不错 准备入手wp

要到今年9月才发布吧…… --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- --------------------编程问答-------------------- 多谢分享 --------------------编程问答-------------------- 非常感谢分享 --------------------编程问答-------------------- 多谢分享 --------------------编程问答-------------------- SQLITE:第三方的便携数据库格式。
还是不错的.
补充:移动开发 ,  Windows Phone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,