MetricKit框架详细解析(四) —— Gathering Information About Memory Use(一)

版本记录

版本号 时间
V1.0 2021.05.13 星期四

前言

MetricKit由iOS13系统进引入,用来汇总和分析有关异常和崩溃诊断以及电源和性能指标的每个设备的报告。下面我们就一起来看下这个框架。感兴趣的可以看下面几篇文章。
1. MetricKit框架详细解析(一) —— 基本概览(一)
2. MetricKit框架详细解析(二) —— Improving Your App's Performance(一)
3. MetricKit框架详细解析(三) —— Reducing Your App's Memory Use(一)

Overview

通过评估和分析应用程序来确定内存使用效率低下的问题。

XcodeInstruments提供了多种工具来观察和探索应用程序中的内存使用情况。


Review the Memory Report

当您的应用程序在Xcode中运行时,可从XcodeDebug导航器中获得的内存报告显示该应用程序当前的内存使用情况以及看到的最大值。 内存规的黄色区域表示内存使用量足够高,可以触发警告。 如果该应用的内存使用量进入红色区域,则该应用有被iOS终止的风险。

注意:如果iOS由于使用过多内存而反复终止您的应用程序,则可以在模拟器中调查其行为,然后在模拟器中继续运行。 在模拟器中运行应用程序时,内存量表始终停留在绿色(安全)区域,因为macOS不会发出内存警告或内存不足终止。 此行为在诊断与过多内存使用相关的问题方面具有优势。 但是请记住,模拟器中仪表绿色区域内的内存使用并不一定意味着您的应用程序的内存使用处于安全范围内。


Inspect the Debug Memory Graph

您可以通过在工作区窗口底部的Xcode调试区域中单击Debug Memory Graph按钮来生成应用程序中对象和分配的内存图。

内存图显示了您的应用程序正在使用的内存区域以及每个区域的大小。 图中的节点表示对象,堆分配或内存映射文件。 节点之间的连接(如箭头所示)显示了一个内存区域引用另一个内存区域的位置。

内存图显示您的应用程序在哪里使用内存,以及这些使用之间的关系。您可以使用allocation stack traces来扩充内存图表,以便每个区域都与在分配该区域的点记录的调用堆栈跟踪相关联。

要打开分配堆栈跟踪(allocation stack traces),请在scheme’s Run设置的Diagnostics区域中选中Malloc Stack框。启用分配堆栈跟踪后,内存图中节点的检查器将显示分配该节点时记录的堆栈跟踪。使用此信息将内存图中的内存分配与应用程序源代码中的函数和方法相关联。

要从Xcode导出内存图,请选择File > Export Memory Graph。您可以与团队成员共享导出的内存图,也可以使用命令行工具(包括vmmapleaks)进行探索。有关命令行工具的更多信息,请参阅WWDC 2018 session 416,iOS Memory Deep Dive。


Profile Your App Using the Allocations Instrument

Allocations工具跟踪所有堆和匿名虚拟内存(VM)分配的大小和数量,并按类别组织它们。使用Allocations工具的时间线来调查您的应用分配的内存总量在您使用应用界面时如何增加和减少。使用统计信息视图(statistics view)查看正在进行的分配类别,在每个类别中进行的分配数量以及这些分配的大小。单击类别名称旁边的箭头,以查看在该类别中进行的各个分配,以及分配内存的时间和负责分配的代码。

Allocations工具中的Generations视图对于调查应用程序特定功能的内存使用情况很有用。启动您的应用程序,并准备使用正在研究的功能-例如,导航至具有特定控件的视图。接下来,单击Allocations工具中的Mark Generation按钮。在您的应用程序中激活该功能,然后再次单击Mark GenerationInstruments按代组织内存分配,在您单击Mark Generation时分开。您可以隔离使用功能期间发生的内存分配。并非这段时间内记录的所有分配都与您正在研究的功能相关联,但是generation marks之间未发生的许多无关分配已从考虑中删除。


See Also

1. Related Documentation

  • Identifying High-Memory Use with Jetsam Event Reports

后记

本篇主要讲述了Gathering Information About Memory Use,感兴趣的给个赞或者关注~~~

你可能感兴趣的:(MetricKit框架详细解析(四) —— Gathering Information About Memory Use(一))