当从具有EntitySet的对象保存在应用程序状态中时,从休眠状态恢复时,我收到OutOfMemoryException。这是一个示例代码。
var list = new TaskList() { Title = "AA" };
list.TaskItems = new EntitySet<TaskItem>();
list.TaskItems.Add(new TaskItem() { Notes = "BB" });
PhoneApplicationService.Current.State["CurrentList"] = list;//Fails only when resuming
var list1 = (TaskList)PhoneApplicationService.Current.State["CurrentList"]; // WORKS FINE
//PhoneApplicationService.Current.State["CurrentList"] = "AnyString" //Works fine;
现在我按“开始”并离开应用程序。然后我按下“返回”按钮使其从休眠状态恢复,它说“恢复”一段时间后,我在一段时间后得到一个OutOfMemory异常。
当我从“状态”存储和检索对象时,它工作正常。它只在“恢复”时抛出异常。有谁知道为什么?有没有解决方法?
答案 0 :(得分:1)
我正在回答我自己的问题。我在TaskList和TaskItem对象之间有循环引用,在反序列化期间失败。由于EntitySet,我认为它失败了并且问了这个问题。对不起。
答案 1 :(得分:0)
在代码中,当您从Dormant状态恢复应用程序时,表明您正在将CurrentList
保存到应用程序状态。我认为你应该在逻辑删除时保存到应用程序状态,而不是恢复。
休眠
当用户向前导航时,远离应用程序,之后 引发停用事件,操作系统将尝试放入 应用程序进入休眠状态。在这种状态下,所有的 应用程序的线程已停止,并且不会进行任何处理,但是 应用程序在内存中保持不变。如果申请是 从此状态重新激活,应用程序不需要 重新创建任何状态,因为它已被保留。
如果在申请完成后启动了新的申请 休眠,这些应用程序需要的内存比可用内存多 为了提供良好的用户体验,操作系统将会开始 墓碑休眠应用程序释放内存。
http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx