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 个项目然后停止工作。

wp8 PeriodicTask 和持久存储

你没有详细说明你得到的错误(如果有的话(,所以很难说。

话虽如此,我想到了以下几件事:

  • 如果在异步调用完成之前调用NotifyComplete(),则可能在有机会之前就被关闭了
  • 后台任务只有 6mb 内存(WP8 上为 12mb(。如果您检查它,您的进程将被终止
  • 后台任务只有 25 秒左右的时间来执行。如果您继续超过此时间,您的进程将被终止。
  • 不要使用 IsolatedStorageSettings 类在进程之间共享状态
  • 您应该使用Mutex来保护对存储的进程访问。

您遇到的问题到底是什么?使用 IsolatedStorageSettings 不应限制能够保留的列表的大小。