wp8 PeriodicTask和持久存储

时间:2013-10-10 08:59:26

标签: c# windows-phone-8

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

2 个答案:

答案 0 :(得分:1)

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

话虽如此,这里有一些想到的事情:

  • 如果您在异步电话完成之前致电NotifyComplete(),您可能会在有机会之前被关闭
  • 后台任务只有6mb的内存(WP8上为12mb)。如果你继续讨论,你的流程将被终止
  • 后台任务只需25秒左右即可执行。如果您继续这样做,您的流程将被终止。
  • Don't use the IsolatedStorageSettings class to share state between processes
  • 您应该使用Mutex来保护对存储的进程访问权限。

答案 1 :(得分:0)

您遇到的问题究竟是什么?使用IsolatedStorageSettings不应该限制您能够持久保存的列表的大小。