(何时)Xamarin.iOS垃圾收集器是否会停止整个应用程序?

时间:2017-07-31 06:18:50

标签: xamarin xamarin.ios garbage-collection

Xamarin Cross-Platform Performance Documentation州:

  

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

我想知道一些细节:

  • 我非常认为这适用于Xamarin.iOS?这是对的吗?
  • 这是否适用于整个申请?那也是非管理方?
    • 原生ui线程是否也停止了?
    • 非托管线程也停止了吗?例如。本机库创建的线程是通过P / Invoke?
    • 包装的
  • 所有集合(次要和主要)是否都会阻止线程?或者这仅适用于主要馆藏?
  • 以防万一:去年的行为有变化吗?

1 个答案:

答案 0 :(得分:1)

标准警告适用于你应该剖析看你的情况如何,但这里有一些答案:

  1. 这当然适用于Xamarin.iOS。
  2. 是的,这将阻止UI线程。
  3. 我猜这纯粹是不受管理的'后台线程,即从本机库启动而不是指任何托管代码,不会被阻止,但这是一个猜测。
  4. 次要收藏也会阻止,但通常会缩短很短的时间。
  5. 最后,是的,最近通过添加concurrent garbage collection来改变了这一点:

      

    传统上,当Mono的内存管理器确定应该这样做时   执行垃圾收集,收集器不得不暂停所有单声道   运行线程,执行垃圾收集,一旦完成,   它恢复了那些线程的执行。

         

    通过并发垃圾收集,我们可以执行收集   关于老一代(我们称之为主要收藏品)   与您的应用程序同时发生 - 它与...同时发生   你的程序正在运行。当主要收藏完成后,   收集器只需要在很短的时间内暂停Mono线程   时间到了最后。

    Concurrent GC在当前稳定版本的Xamarin中作为构建选项提供(有关详细信息,请参阅link)。