0

我想向 Windows 应用商店提交一个新闻应用程序,但它总是无法通过应用程序认证过程(提交前的本地检查),因为当应用程序暂停时(OnSuspended-Event),我使用 XmlSerializer 将数据序列化为 XML 文件。当我不序列化时,应用程序成功通过了这个认证过程......

文档建议以下内容:

当你序列化你的数据时,如果它没有改变,你应该避免重新序列化。序列化和保存数据需要额外的时间,再次激活应用程序时读取和反序列化数据需要额外的时间。相反,我们建议应用程序确定其状态是否实际发生了变化,如果是,则仅对发生变化的数据进行序列化和反序列化

我真的很喜欢这个想法,但不幸的是不知道如何实现它。我有一个包含新闻项目的集合(在应用程序启动时下载),用户下载这些新闻项目的详细信息。所以,基本上在暂停时,我只应该序列化这些细节,并且可以在初始加载后序列化新闻项目。我怎样才能做到这一点?

感谢您的帮助!

4

1 回答 1

1

简单的只读数据:

  1. 如果缓存文件存在,则在 App Load 上将其反序列化为内存对象。
  2. 根据用户请求,从服务中获取更新、合并结果并立即序列化所有内容。
  3. 挂起时,无事可做。发生更新后,您的数据已保留。

如果用户进行一些更改怎么办:

  1. 如果缓存文件存在,则在 App Load 上将其反序列化为内存对象。
  2. 在用户编辑时,更新到/从服务,合并结果并立即序列化所有内容。
  3. 挂起时,无事可做。发生更新后,您的数据已保留。

这里真正的收获是,在暂停时您应该无事可做或几乎无事可做。暂停事件旨在让您的应用有时间保存其状态。它不打算保存其数据。这是因为最轻微的打嗝可能会导致您的保存过程失败,并且因为您只有几秒钟(毫不留情)您的数据会丢失并且您的应用程序看起来很糟糕。

由于应用程序切换速度快,内存中已有的缓存不会改变。因为您明确监视服务的更新或用户的更改,所以您没有理由“确定”内存中的内容与缓存文件中的内容之间是否存在差异。

另一个建议,如果它很大,不要将整个对象序列化为单个文件。出于性能原因,您没有理由不能分解您的类并单独列出和序列化它们。老实说,这很常见。

于 2012-10-05T23:27:38.613 回答