【问题标题】:Xamarin Forms Android GC loopXamarin 形成 Android GC 循环
【发布时间】:2017-04-19 11:33:05
【问题描述】:

我使用 SQLite.Net Async 库从 SQLite 数据库缓存实体,因为它们经常需要。当我导航到使用大量绑定来显示实体的某个页面(如下所述)时,会发生“无限”GC 循环。

缓存我正在使用的实体

SQLiteAsyncConnection.Table<T>().ToListAsync()

并将它们存储在一个

ConcurrentDictionary<Type, IEnumerable<IEntity>>

之后我使用

Parallel.ForEach()

使用大量反射和递归来映射每个实体。这个过程似乎相当快...

当我导航到麻烦的页面时,它会检索缓存的实体并将它们显示在 ListView 中。当一个实体被点击时,关于该实体的信息应该通过绑定显示到屏幕上。当用户点击屏幕时,循环就开始了。

从杂货店回来后,我发现它还没有完成。

我已经在使用 HAXM、2GBRAM、256Heap 大小和我不知道其类型的 Galaxy Tab 运行的模拟器上对此进行了测试,两者都有相同的问题(尽管平板电脑可以在循环开始之前处理更多实体)。

我知道这可能还不够信息,我会提供更多信息,但我只是不知道去哪里寻找或什么可能导致这种情况。

非常感谢任何帮助!

你的,

【问题讨论】:

  • 能否分享一个可以重现问题的基本演示?
  • 我今天会继续努力的!

标签: c# android xamarin garbage-collection xamarin.android


【解决方案1】:

我终于找到了问题所在。起初我认为这与我正在缓存的实体数量有关,因为只有当实体数量达到 X 时才会出现问题。当我逐条注释掉 XAML 以测试为什么页面如此麻烦时,我发现了真正的问题。

我创建了一个GIST 来显示发生了什么。

TLDR;
我运行了多个验证行为,它们相互冲突。

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多