墓碑时数据在Application_Deactivated的保存发生异常

我定义了一个全局变量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中存储状态,在设计中减少使用全局变量,大数据更应该避免。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值