wp8 PeriodicTask 和持久存储
本文关键字:存储 PeriodicTask wp8 | 更新日期: 2023-09-27 18:34:39
我有一个 PeriodicTask,它更新了手机应用程序的磁贴并将信息保存到持久存储中。
这工作正常,直到列表达到大约 11 或 12 的大小。
我保存的对象是一个具有大约 5 个成员的 poco 对象。我基本上获取数据,保存数据并创建磁贴(未显示(。
所以
//get data
var newData = GetPocoFromWeb();
base.Add(newData);
基类
public abstract class DataFetcher<T> where T : IDataCarrier, new()
{
protected readonly IPersist<List<T>> Persist;
protected DataFetcher(IPersist<List<T>> persist)
{
Persist = persist;
}
protected void Add(T item)
{
var items = Persist.Load();
items.Add(item);
Persist.Save(items);
}
}
持久类
public class Persist<T> : IPersist<T>
{
private readonly string _identifier;
public Persist(string identifier)
{
_identifier = identifier;
}
public virtual T Load()
{
if (IsolatedStorageSettings.ApplicationSettings.Contains(_identifier))
{
return (T)IsolatedStorageSettings.ApplicationSettings[_identifier];
}
return default(T);
}
public virtual void Save(T item)
{
IsolatedStorageSettings.ApplicationSettings[_identifier] = item;
IsolatedStorageSettings.ApplicationSettings.Save();
}
}
我是否使用了错误的存储?列表中的 11 个项目并不是那么多。
更新:当我加载列表并使用应用程序(而不是通过 periodicTask(添加到其中时,我可以轻松保存数百个项目。
在模拟器中运行时我没有收到任何错误,它只是工作,直到列表有大约 11 个项目然后停止工作。
你没有详细说明你得到的错误(如果有的话(,所以很难说。
话虽如此,我想到了以下几件事:
- 如果在异步调用完成之前调用
NotifyComplete()
,则可能在有机会之前就被关闭了 - 后台任务只有 6mb 内存(WP8 上为 12mb(。如果您检查它,您的进程将被终止
- 后台任务只有 25 秒左右的时间来执行。如果您继续超过此时间,您的进程将被终止。
- 不要使用
IsolatedStorageSettings
类在进程之间共享状态 - 您应该使用
Mutex
来保护对存储的进程访问。
您遇到的问题到底是什么?使用 IsolatedStorageSettings 不应限制能够保留的列表的大小。