我使用Xml序列化在Isolatedstorage中存储一个包含大约3,000个对象的List。 反序列化需要很长时间,我想知道你是否有任何建议来加快它的速度。
最多可以反序列化500个对象的时间,但需要永远反序列化3000个。 是否只需要在模拟器上运行更长时间,手机上的速度会更快?
我做了一大堆搜索,有些文章说使用二进制流阅读器,但我找不到它。无论我存储在二进制文件还是xml中都没关系,我只想保留List。
我现在还不想看异步加载......
答案 0 :(得分:4)
首先,这里有一些很好的信息,所以+1那里。
我建议您查看这些文章,使用各种开箱即用的序列化技术,为您提供一些良好的视角。
Windows Phone 7 Serialization: Comparison | eugenedotnet blog
如果您不需要一次性加载和写入所有内容,也可以考虑使用多个文件。
我会重申杰夫的建议,在将此后发现的任何实质性工作转移到后台线程上以便不降低用户交互体验真的是一个好主意。
这是相当直接的。这是我经常推荐的一个演练,人们会发现简洁而有用。
Phạm Tiểu Giao - Threads in WP7
此外,Shawn Wildermuth最近看起来也很不错。
Shawn Wildermuth - Architecting WP7 - Part 9 of 10: Threading
答案 1 :(得分:3)
对于那么多项目,您需要构建优化的序列化故事。我看到许多人使用简单的CSV和文本格式来执行此操作。
内置的序列化器不够快。
你应该考虑在后台线程上做这一切有很多原因,不过是的,你已经表明你不想这样做。
答案 2 :(得分: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>);
}