我通过使用SQLite.Net Async库从SQLite数据库缓存实体,因为它们经常需要。当我导航到某个页面(如下所述)时,该页面使用大量绑定来显示实体“无限”。发生GC循环。
使用
缓存实体I&#39; mSQLiteAsyncConnection.Table<T>().ToListAsync()
并将它们存储在
中ConcurrentDictionary<Type, IEnumerable<IEntity>>
在此之后我使用
Parallel.ForEach()
有大量的反射和递归来映射每个实体。这个过程似乎相当快......
当我导航到麻烦的页面时,它会检索缓存的实体并将它们显示在ListView中。当点击实体时,应该通过绑定将关于实体的信息显示在屏幕上。当用户点击屏幕时,循环就开始了。
我已经在运行HAXM,2GBRAM,256Heap大小和Galaxy Tab的模拟器上对此进行了测试,其中我不知道这两种类型都有相同的问题(尽管平板电脑可以处理更多实体在循环开始之前)。
我知道这可能不是足够的信息,而且我会提供更多信息,但我不知道在哪里寻找或可能导致这种情况。
非常感谢任何帮助!
此致,
答案 0 :(得分:0)
我终于找到了问题。起初我认为它与我缓存的实体数量有关,因为问题只在实体数量达到X时才会出现。当我逐条评论XAML以测试为什么页面如此麻烦时我发现了真正的问题。
我创建了一个GIST来显示发生了什么。
TLDR;
我运行多个验证行为,它们彼此冲突。