Xamarin.iOS 垃圾回收器何时停止整个应用程序?

3

Xamarin跨平台性能文档中提到:

当SGen开始进行垃圾回收时,它会停止应用程序的线程,同时回收内存。

我有几个问题:

  • 我非常确定这适用于Xamarin.iOS吗?这是正确的吗?
  • 是否适用于整个应用程序?也就是说,未托管侧也是如此吗?
    • 本地ui线程也会停止吗?
    • 未管理的线程也会停止吗?例如,通过P/Invoke包装的本地库创建的线程?
  • 所有集合(小集合和大集合)都会停止线程吗?还是仅适用于大集合?
  • 以防万一:行为在过去一年中有变化吗?
1个回答

2

标准警告适用,您应该进行分析以查看在您的情况下如何运行,但以下是一些答案:

  1. 这当然适用于Xamarin.iOS。
  2. 是的,这会阻塞UI线程。
  3. 我猜'纯非托管'后台线程,即从本机库启动并且不引用任何托管代码的线程,不会被阻塞,但这只是一个猜测。
  4. 次要收集也会阻塞,但通常时间更短。

最后,是的,随着并发垃圾回收的添加,这最近发生了重大变化:

传统上,当Mono的内存管理器确定应该执行垃圾回收时,收集器必须暂停所有正在运行的Mono线程,执行垃圾回收,并在完成后恢复这些线程的执行。通过并发垃圾回收,我们能够在您的应用程序几乎同时运行的情况下,对旧一代(我们称之为主要收集)进行收集。当主要收集完成后,收集器只需要在最后短暂地暂停Mono线程即可。当前稳定版本的Xamarin中提供了并发GC作为构建选项(有关详细信息,请参见link)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接