2013-10-10 127 views
0

我有一个PeriodicTask,它为我的手机应用更新一个磁贴并将信息保存到持久存储。wp8 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个项目,然后停止工作。

回答

1

你不会详细讨论你得到的错误(如果有的话),所以很难说。

话虽如此,这里的浮现在脑海中的几件事情:

  • 如果异步调用完成之前调用NotifyComplete(),你可能会被关闭,你有机会
  • 背景前任务只有6mb的内存(WP8为12mb)。如果你过去了,你的过程将被终止
  • 后台任务只有25秒左右才能执行。如果你继续过去,你的过程将被终止。
  • Don't use the IsolatedStorageSettings class to share state between processes
  • 您应该使用Mutex来保护对存储的进程访问权限。
+0

谢谢。我怀疑我可能会超出内存限制,也许我一直在讨论这个错误。 我读了isolatedstoragesettings,看来也许我可能会更好地使用本地数据库。 我会测试今晚和结果更新 –

+0

这是记忆,似乎我一定是在边缘由于我如何创建我的瓷砖(controltoimage)和孤立的存储推动它的边缘...有趣的我尽管如此。我重写了图像创作,这让我有更多的记忆可以玩。 –

0

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

+0

我为主应用程序使用了隔离存储并且它可以工作(我测试了大约150个)问题是,当使用Periodtask运行此技术时,所需资源不符合期限任务的Microsoft要求。 我觉得很奇怪,当保存的列表大小只有11大时,它会掉下来 –