我定义了一个全局变量List<con> conlist, 以便能够在程序的每个页面都能够使用到它,所以当程序墓碑时,conlist就需要保存,我开始时是这样保存数据的:
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
if ( conlist != null)
{
PhoneApplicationService.Current.State["value"] = conlist ;
}
}
但是当conlist的值比较大时,会发生如下异常:
"State saving failed. This is most likely due to insufficient State buffer capacity. App requires [3342315] bytes which likely exceeds NavServer limit"
从字面的意思来看是conlist的值过大超过了state的容量,也可能是由于程序在此所花时间超过了10s,因为我在madn上发现这样一句话:
如果您的应用程序完成此处理程序所花的时间超过 10 秒,则应用程序将会终止。鉴于此原因,我们建议您在应用程序的整个生存期内以增量方式保存状态。此事件只不过是保存任何未保存数据的最后机会。
具体请参见:保留和还原应用程序状态。
后来我采用了另一种方式来保存值,即使用独立内存。
private IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
if (GlobalContactinfo != null)
settings["value"] = conlist
}
这样是没有问题了,但是我不能确定,如果数据再大点会不会出现问题,所以我还是建议我们在每个页面的OnNavigatingFrom中存储状态,在设计中减少使用全局变量,大数据更应该避免。