什么会导致 "TaskModel.Interop.Task.SaveTaskState" 发生异常,我该如何调试它?

What would cause an exception to occur at "TaskModel.Interop.Task.SaveTaskState" and how can I debug it?

对于我的 Windows Phone 8 个应用程序之一,我可以看到崩溃次数很高,详细信息如下:

错误

State saving failed. This is most likely due to insufficient State buffer capacity. App requires [3289135] bytes which likely exceeds NavServer limit

堆栈跟踪

at Microsoft.Phone.TaskModel.Interop.Task.SaveTaskState() at Microsoft.Phone.TaskModel.Interop.Task.FireOnPause(UInt32 reason);

显然这些是内部函数,但我不知道它们为什么会出现。除了保存和恢复状态似乎出现之外,我在网上几乎找不到关于此异常的信息。我正在按照 MSDN 上本指南中的方法执行此操作:

https://msdn.microsoft.com/en-us/library/windows/apps/ff967548(v=vs.105).aspx

MSDN 论坛上也有类似的问题,但没有可靠的答案:

https://social.msdn.microsoft.com/Forums/windowsapps/en-US/74934801-8713-42be-9216-825cd0c09851/strange-0x87b20c05-exception?forum=wpdevelop

问题:是否有任何明显的原因导致出现此异常或我可以尝试重现此异常的任何方式?

所以最后这个问题的答案是相当明显的,给出了错误信息:

App requires [3289135] bytes which likely exceeds NavServer limit

基本上我从 IsolatedStorage 加载了一个 List,其中包含大量数据,当应用程序在后台停用或启动时 运行,数据在我的视图模型保存到 State.

我通过用属性 [IgnoreDataMember] 标记这个 List 来解决它,所以我的大 List 不会保存到 State。我只是重新加载 List 以在 OnNavigatedTo 事件中显示。基本上,确保您的视图模型中没有大量数据。就我而言,导致出现此错误的数据刚刚超过 3MB。