2017-07-31 58 views
3

Xamarin Cross-Platform Performance Documentation状态:(何时)Xamarin.iOS垃圾收集器是否停止整个应用程序?

当SGEN启动垃圾收集,它会同时回收内存停止应用程序的线程。

我想了解一下几个细节:

  • 我非常想这适用于Xamarin.iOS?它是否正确?
  • 这是否适用于整个应用程序?那也是非管理方?
    • 本地ui线程是否也停止了?
    • 非托管线程也停止了吗?例如。由通过P/Invoke包装的本地库创建的线程?
  • 是否所有的收集(小和主要)停止线程?或者这只适用于主要收藏?
  • 以防万一:行为在去年有变化吗?

回答

1

标准的原则同样适用,你就应该剖析,看看如何发挥出来,你的情况,但这里有一些答案:

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

最后,是的,这最近显著通过添加concurrent garbage collection改变:

传统上,当Mono的内存管理器确定它应该 执行垃圾收集,收集器不得不暂停所有Mono 正在运行线程,执行垃圾回收,一旦完成, 它重新开始执行这些线程。

并发垃圾收集,我们能够履行对老一代收藏 (我们称之为大集合)大多 同时与您的应用程序 - 它发生在同一时间为 程序运行。主要收集完成后, 收集器只需在最后一段时间暂停单线程,时间为非常短的时间段 。

并行GC在Xamarin的当前稳定版本中可用作构建选项(有关详细信息,请参阅link)。