如何使用XmlSerializer优化挂起时间?

时间:2012-10-04 21:09:29

标签: c# serialization windows-8 microsoft-metro xmlserializer

我想将新闻应用程序提交到Windows应用商店,但它始终未通过应用认证过程(提交前进行本地检查),因为我在暂停应用时使用XmlSerializer将数据序列化为XML文件(OnSuspended-Event) )。当我没有序列化时,该应用程序成功通过了此认证过程......

documentation表明以下内容:

  

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

简单的只读数据:

  1. On App Load如果存在缓存文件,则将其反序列化为内存对象。
  2. 在用户请求中,从服务获取更新,合并结果并立即序列化所有内容。
  3. 暂停,无事可做。更新发生后,您的数据已经保留。
  4. 如果用户做了一些更改怎么办:

    1. On App Load如果存在缓存文件,则将其反序列化为内存对象。
    2. 在用户编辑,更新到/从服务更新,合并结果并立即序列化所有内容。
    3. 暂停,无事可做。更新发生后,您的数据已经保留。
    4. 这里真正的要点是,在暂停时你应该没有任何东西或几乎无所事事。暂停事件旨在为您的应用提供时间来保存其状态。它无意保存其数据。这是因为最轻微的打嗝可能导致您的保存过程失败,并且因为您只有几秒钟(没有任何怜悯),您的数据将丢失,您的应用程序看起来很糟糕。

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

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