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

gnimgnot 2012-07-22 01:22:14
加精
讨论范围:介于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 存储大量数据


时间问题,内容写的不是很深入,但希望对大家有帮助,如果有需要,我会补充具体代码
...全文
2572 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzq138 2012-10-20
  • 打赏
  • 举报
回复
SQLITE:第三方的便携数据库格式。
还是不错的.
newgoody 2012-10-12
  • 打赏
  • 举报
回复
多谢分享
永远的小鱼 2012-09-24
  • 打赏
  • 举报
回复
非常感谢分享
ltioaf001 2012-09-22
  • 打赏
  • 举报
回复
多谢分享
LAONINGA098 2012-08-06
  • 打赏
  • 举报
回复
感谢分享
LAONINGA098 2012-08-04
  • 打赏
  • 举报
回复
感谢分享
roc1010 2012-08-03
  • 打赏
  • 举报
回复
感谢分享
江南小鱼 2012-08-02
  • 打赏
  • 举报
回复
不错,兄弟。
nnnnyyyy 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]

不错 准备入手wp
[/Quote]
要到今年9月才发布吧……
cs_lonely 2012-08-02
  • 打赏
  • 举报
回复
thanks a lot
gnimgnot 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 的回复:]
可是在我得到的sdk 8 developer preview的文档里面没有提到新的存储方式啊

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


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

有支持外部SD卡,但目前只能只读方式
岁月无情_1 2012-07-31
  • 打赏
  • 举报
回复
可是在我得到的sdk 8 developer preview的文档里面没有提到新的存储方式啊
[Quote=引用 33 楼 的回复:]
引用 30 楼 的回复:
phone 8 里面并没提到新的存储方式


wp8可能会以某种方式支持外部存储,或者可能支持文件夹,但具体的形式还需验证
[/Quote]
lovejackjones 2012-07-31
  • 打赏
  • 举报
回复
不错 准备入手wp
  • 打赏
  • 举报
回复
留个信,期待WP8 SDK快点!
LAONINGA098 2012-07-28
  • 打赏
  • 举报
回复
不错哦…………
91program 2012-07-27
  • 打赏
  • 举报
回复
不错,学习了
zhangwen32922 2012-07-26
  • 打赏
  • 举报
回复
thanks a lot
zmrxcy 2012-07-26
  • 打赏
  • 举报
回复
感谢楼主的无私奉献
zmrxcy 2012-07-26
  • 打赏
  • 举报
回复
感谢分享,感谢上帝
gnimgnot 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 的回复:]
phone 8 里面并没提到新的存储方式
[/Quote]

wp8可能会以某种方式支持外部存储,或者可能支持文件夹,但具体的形式还需验证
加载更多回复(20)

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧