快速应用程序切换是Mango中应用程序的慢速切换

时间:2011-12-12 17:44:28

标签: windows-phone-7.1 windows-phone-7

我有一个问题,我希望有人可以提供帮助。我有一个应用程序,出于所有意图和目的,工作得很好。它基本上是一个图片浏览器类型的应用程序 - 用于非常具体的东西。它是500张图片。

我将所有图片设置为内容,我一次加载/卸载一个。对于500张图片,我有一个类用作每张图片的数据。所以像“放置”,“索引”,“简短描述”等等。我从不需要在此列表中插入或删除,但我可能需要对每个单独的一个进行一些更改,例如“用户查看此图片” ...“(日期)或”favorite = true“(布尔值,用户将图片标记为收藏图片)。

部署应用程序时,此“图片元数据”位于xml文件中。然后将其反序列化并在首次运行时保存到IsoStorage。它的副本保存在内存中,这是用于运行我的整个应用程序的内容。我有3个不同的页面都使用该数据,在app.xaml.cs中设置为静态属性。在取消激活/关闭时,数据被序列化回xml - 重新启动时,它被反序列化。一切都运行良好,快速 - 无处不在。包括墓碑。

问题是从Deactivation恢复,其中应用程序未被逻辑删除。它可能需要10-15秒,肯定是从e.IsApplicationInstancePreserved Application_Activated返回(即它没有被墓碑化)。

从全新激活,应用程序启动大约需要3-4秒。从墓碑中回来也需要大约3秒钟。

我不理解为什么从e.IsApplicationInstancePreserved = true;返回的时间太长(并且不允许我通过认证)。我已经测试过,发现如果它是List中的大约10个项目,它对FAS非常敏感。如果List中有大约50个项目,则不会立即生效。如果有100个项目,那么这是你第一次看到“正在恢复...”(是的,那个词来自FAS,而不是墓碑)。如果我拥有它,在List中的500,观看FAS(这是SAS)的速度非常慢。

有趣的是,在模拟器中,即使内存中有1000个对象,FAS也能完美运行。这是在一个实际的设备上,它在调试和发布模式下都非常慢(Samsung Focus)。

现在我知道简单的答案可能是“为什么要一直维护一个包含500个对象列表的类?”,但我的整个架构和用户体验都是基于所有三个页面上的图片数据每时每刻。 Linq非常习惯于在任何地方报告数据。

有关这种情况的任何想法或指导?

2 个答案:

答案 0 :(得分:1)

很高兴听到你发现了这个问题。

“对我来说是一个序列化/反序列化问题。你是否将列表存储在一个State'变量'中?框架将在离开应用程序时序列化并在返回时反序列化它”

答案 1 :(得分:0)

请记住,您的PC +仿真器比具有500MB RAM的手机1GHz单核ARM处理器更快,更强大!

当您使用e.IsApplicationInstancePreserved == true激活您的应用时,您不需要恢复任何状态,并且您应该可以选择用户离开的位置。

如果您说当您的列表编目500个项目时,恢复应用程序时性能非常慢,我想知道您是否还将500个图像保留在内存中并且您的手机必须将所有数据交换到你的应用程序的内存空间。如果您的应用程序有多个页面,每个页面都包含500张图像的副本,这将更加复杂!

强烈鼓励您 profile your app 来衡量其内存占用量,并查看大内存,存储,IO和性能问题的位置。