应用程序向手机新增联系人,当增加的联系人超过1000时,会引发异常,具体操作为:(增加联系人是个异步方法, 在增加过程中更新进度条)增加联系人时按home键休眠或墓碑程序,然后再返回时回报异常:
【message】 "State saving failed. This is most likely due to insufficient State buffer capacity. App requires [3342315] bytes which likely exceeds NavServer limit"
【source】 "Microsoft.Phone.Interop"
【stacktrace】 "at Microsoft.Phone.TaskModel.Interop.Task.SaveTaskState()
at Microsoft.Phone.TaskModel.Interop.Task.FireOnPause(UInt32 reason)"
请问这是怎么造成的,该如何处理?
------解决方案--------------------
个人认为这应该从联系人备份逻辑来解决,而不是考虑墓碑机制。
------解决方案--------------------
所以要解决数据多的问题,可以考虑将接收到的数据放在独立存贮的空间中,写成文件。这样就没有必要开那样大的全局数据。
------解决方案--------------------
墓碑时不一定要存储在内存的state里面,数据量太大完全可以先存在本地。
------解决方案--------------------
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
if(isf)
{
IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream("Contacts.csv", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read, isf);
byte[] buffer = "你需要保存的数据" 转换成的byte数组;
if(isfStream)
{
isfStream.Write(buffer, 0, buffer.Length);
}
isfStream.Close();
}
这样就把数据保存在了IsolatedStore的根目录底下的Contacts.csv文件里了
------解决方案--------------------
现把list存本地,然后把导入的序号记在墓碑里。
------解决方案--------------------
你说的对。确实有可能失败。
------解决方案--------------------
全局变量在墓碑后是如何恢复的?可以保存在phoneapplicationservice中,或是settings里面,就可以了
------解决方案--------------------
