iOS/MonoTouch 有了新的垃圾回收器和内存分析器

  • Jonathan Allen
  • 曹如进

2012 年 2 月 21 日

话题:.NET移动iOS语言 & 开发

针对 iOS 的 MonoTouch 目前支持了分代式垃圾回收器(generational garbage collector)SGen。直到不久之前,Sgen 还只是完整版本 Mono 中的一个实验性部分。伴随着垃圾回收器一同到来的,还有一个为 iOS 准备的内存分析器(Memory Profiler),它可以从 MonoDevelop 集成开发环境中访问到。

分代式垃圾回收器 Sgen 取代了 Mono 中传统的Boehm 垃圾回收器。虽然 Sgen 预计会有更好的性能,但其保守式扫描仍然会给它带来一些阻碍。预计将来 Sgen 会切换到精确的堆栈标记系统,这样应当可以大幅度减少产生的内存碎片。

iOS 分析器支持两种模式,默认模式是堆分析模式,在该模式中内存快照可以根据需要或者触发器进行采集,而该触发器可以设置成一定数量的垃圾收集器周期或者基于时间的时间间隔。此外,该分析器还包含了一些标准工具,如对比快照和查找内存中的对象位置。

性能分析支持统计抽样,以及精确性虽佳但速度不足的进入 / 离开事件记录。统计抽样采集应用程序快照,并根据每个方法被采集器抓取的频度对它们的速度进行评估。从字面上看,进入 / 离开事件记录就是在函数每次开始或完成时记录一条日志。它虽然提供了时间花费的完整记录,但会带来严重的性能开销。这种模式同样能够捕获与对象分配相关的堆栈跟踪。

MonoDevelop 2.8.5 和 MonoTouch 5.1.1 都规定使用该工具。而对于个别项目,必须激活调试、分析和 SGen 垃圾回收器选项。

查看英文原文:A New Garbage Collector and Memory Profiler for iOS/MonoTouch

.NET移动iOS语言 & 开发