启动时间测量 - ShenYj/ShenYj.github.io GitHub Wiki
增加启动环境变量, 统计main函数启动前所使用的时长
- Product -> Scheme -> Edit Scheme:
- Run -> Environment Variables下新增变量
DYLD_PRINT_STATISTICS
Value为1
- 运行工程, 启动后, 控制台便可看到统计时间
-
说明
- dylib loading: 动态加载器查找并读取 App 使用的依赖动态库(dylibs)。每个库本身都可以有依赖项。 Apple 系统框架的加载经过高度优化,但加载嵌入式框架可能会很昂贵。为了加快 dylib 加载,Apple 建议您使用更少的 dylib 或考虑合并它们 建议的目标是六个额外的(非系统)框架。
- rebase/binding: 修复调整图像内的指针(偏移)并设置指向image(二进制文件)外符号的指针(绑定)。为了加快偏移/绑定时间,您需要更少的指针修复。具有大量 Objective-C 类、选择器和类别的应用程序可以将启动时间增加 800 毫秒(大为 20,000)。如果您的应用使用 C++ 代码,请使用较少的虚拟函数。使用 Swift Structs 通常也更快。
- ObjC setup: Objective-C 运行时需要对类注册、类别注册和选择器唯一性进行一些设置。您对变基/绑定时间所做的任何改进也将适用于此设置时间。
- initializer: 运行初始化程序。如果您使用(已弃用)Objective-C +load 方法,请将其替换为 +initialise.**
- slowest intializers: 最慢的初始化描述
- libSystem.B.dylib: -
- libMainThreadChecker.dylib: -
- libglInterpose.dylib: -
- marsbridgenetwork: -
- mars: -
- 主程序: 主程序耗时
-
参考链接:
注: 此方法在 iOS 15+ 上失效
- 在main函数中记录启动时间
- 在
AppDelegate中
引用startTime
:
FOUNDATION_EXTERN CFAbsoluteTime startTime;
- 计算耗时
NSLog(@"启动时间: %f", CFAbsoluteTimeGetCurrent() - startTime);
- 启动后控制台查看耗时时间
-[AppDelegate application:didFinishLaunchingWithOptions:] [Line 28] 启动时间: 0.093154