是否可以记录Xamarin.iOS中发生重大垃圾收集的时间?

时间:2017-07-31 08:17:45

标签: xamarin xamarin.ios garbage-collection

在Xamarin.iOS中,是否可以记录:

  • ...当发生重大垃圾收集时?
  • ......主要垃圾收集需要多长时间?

使用日志记录,我的意思是使用Console.WriteLine或自定义日志记录实现创建带有时间戳的文本行的线性日志。

GC.RegisterForFullGCNotification(Int32, Int32)GC.WaitForFullGC*() API未在Xamarin.iOS上实施(截至current stable release,也未在Cycle 6 Service Release 4上实施,我们仍在使用错误修正对于较旧的产品)。

我已经成功地以高频率轮询GC.CollectionCount(1)(第一代的收集计数)。但这只能给我一个主要收藏最近发生的信息。此外,这假设主要集合确实是第一代的集合(比较this question)。

是否有其他可能性在Xamarin.iOS中记录垃圾收集详细信息?任何见解将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以设置Mono环境变量以输出GC信息。这些可能是暂时的或永久性的。

永久环境vars是通过iOS构建选项(mtouch)设置的,并且被刻录到应用程序中,因此部署了ipa

--setenv:MONO_LOG_LEVEL=info  --setenv:MONO_LOG_MASK=gc

enter image description here

温度。用于调试目的的env变量通过Run Configuration设置。

输出:

2017-07-31 02:35:30.425 SushiHangover.FlightAvionics[88235:10243737] info: GC_MAJOR: (user request) time 0.90ms, stw 1.29ms los size: 1024K in use: 10K
2017-07-31 02:35:30.426 SushiHangover.FlightAvionics[88235:10243737] info: GC_MAJOR_SWEEP: major size: 1184K in use: 479K