在WP7上将一个大列表存储在独立存储中

4

我使用Xml序列化将约3000个对象的List存储在独立存储中。 反序列化太慢了,我想知道您是否有任何建议来加快速度。

反序列化500个对象的时间是可以容忍的,但反序列化3000个对象需要很长时间。 这只是在模拟器上需要更长的时间吗?在手机上会更快吗?

我做了很多搜索,一些文章说要使用二进制流阅读器,但我找不到它。 无论我是以二进制还是xml格式存储,我只想保留该列表。

我暂时不想考虑异步加载...

3个回答

4

首先,这里已经有一些好的信息,所以+1。

我建议您查看这些文章,让您对使用各种开箱即用的序列化技术可以期望什么性能有一个良好的视角。

Windows Phone 7序列化:比较| eugenedotnet博客

WP7序列化比较

如果您不需要一次性加载和写入所有内容,还可以考虑使用多个文件。

我想重申Jeff的建议,如果您在此之后发现任何实质性的工作,请将其放到后台线程中,以免降低用户交互体验。

这很简单。这是我经常推荐的步骤,人们认为简明而有帮助。

Phạm Tiểu Giao- WP7中的线程

还有最近由Shawn Wildermuth发布的这篇文章,看起来也很不错。

Shawn Wildermuth-设计WP7-第9部分:线程


Mick和Jeff,感谢你们的建议。我并没有真正担心后台线程,因为UI无论如何都需要等待文件加载和信息显示。这是一个解决方法,而不是真正加速过程。此外,我已经阅读了Eugene(不错)的文章,这是很好的信息。我会检查另外两个链接。 - Ra.
异步编程的前提是,即使用户正在等待处理过程,UI 也可以自由操作。例如,他们可能想按返回键。重点是用户应该控制导航,而不是应用程序。如果在此过程发生时有部分应用程序不适合使用,则只需确保在处理完成之前它们不可用即可。我认为异步编程不是一种变通方法,而是一种改进体验的选择。 - Mick N

3

对于这么多的项目,您需要构建自己的优化序列化方案。我看到很多人使用简单的CSV和文本格式来完成这个任务

内置的序列化器并不能够达到足够快的速度。

您真的应该考虑将所有操作都放在后台线程中进行,有很多理由支持这样做,尽管您已经表明不想这样做。


3
请查看sharpSerializer中的二进制序列化程序: http://www.sharpserializer.com/en/index.html 它非常易用且工作效果相当不错。
以下是一篇博客,介绍如何在WP7中使用该程序: http://www.eugenedotnet.com/2010/12/windows-phone-7-serialization-sharpserializer/ 我使用的方法如下(请将此伪代码视为示例,并使用eugenedotnet中列出的函数):
在App.xaml.cs中:
Application_Dectivated()
{
     IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.OpenOrCreate);
     Serialize(stream,(obj)MyHugeList<myObject>);
}

Application_Activated()
{
     IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.Open);
     Deserialize(stream,(obj)MyHugeList<myObject>);
}

非常有用。我正在使用二进制模式,它运行良好,谢谢。 - Ra.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接