在OnActivate上的PhoneApplicationService.Current.State中具有EntitySet(本地数据库)对象的OutOfMemoryException

时间:2012-01-16 04:57:36

标签: silverlight windows-phone-7

当从具有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异常。

当我从“状态”存储和检索对象时,它工作正常。它只在“恢复”时抛出异常。有谁知道为什么?有没有解决方法?

2 个答案:

答案 0 :(得分:1)

我正在回答我自己的问题。我在TaskList和TaskItem对象之间有循环引用,在反序列化期间失败。由于EntitySet,我认为它失败了并且问了这个问题。对不起。

答案 1 :(得分:0)

在代码中,当您从Dormant状态恢复应用程序时,表明您正在将CurrentList保存到应用程序状态。我认为你应该在逻辑删除时保存到应用程序状态,而不是恢复。

  

休眠

     

当用户向前导航时,远离应用程序,之后   引发停用事件,操作系统将尝试放入   应用程序进入休眠状态。在这种状态下,所有的   应用程序的线程已停止,并且不会进行任何处理,但是   应用程序在内存中保持不变。如果申请是   从此状态重新激活,应用程序不需要   重新创建任何状态,因为它已被保留。

     

如果在申请完成后启动了新的申请   休眠,这些应用程序需要的内存比可用内存多   为了提供良好的用户体验,操作系统将会开始   墓碑休眠应用程序释放内存。

http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx