gpt4 book ai didi

c++ - 如何分析 dyld 加载图像时调用初始化函数的时间?

转载 作者:太空狗 更新时间:2023-10-29 23:20:07 25 4
gpt4 key购买 nike

我现在正在尝试优化应用程序的启动时间,目前想减少操作系统镜像加载器所花费的时间。

从 dyld(1) 中,我发现了两个环境变量:DYLD_PRINT_STATISTICSDYLD_PRINT_INITIALIZERS

DYLD_PRINT_STATISTICS 使 dyld 打印有关 dyld 如何花费时间的统计信息。这是我在执行 purge 命令后启动应用程序时的输出。

total time: 5.9 seconds (100.0%)
total images loaded: 130 (101 from dyld shared cache, 0 needed no fixups)
total segments mapped: 105, into 12914 pages with 840 pages pre-fetched
total images loading time: 1.8 seconds (31.0%)
total dtrace DOF registration time: 0.09 milliseconds (0.0%)
total rebase fixups: 137,658
total rebase fixups time: 1.1 seconds (19.4%)
total binding fixups: 28,502
total binding symbol lookups: 1,127, average images searched per symbol: 0.1
total binding fixups time: 452.28 milliseconds (7.6%)
total weak binding fixups time: 188.52 milliseconds (3.1%)
total bindings lazily fixed up: 130 of 1,164
total initializer time: 2.3 seconds (38.7%)
total symbol trie searches: 2611
total symbol table binary searches: 118
total images defining/using weak symbols: 13/65

显然,调用初始化函数会占用大量时间。所以我尝试了 DYLD_PRINT_INITIALIZERS 来获取初始化函数列表。

我确实得到了它们,但是没有关于它们的时间信息,例如时间戳,只有大量的以下行:

dyld: calling initializer function 0x25170 in MY_APPLICATE_PATH

这对我来说找到要优化的目标初始值设定项毫无用处。

所以,我的问题是:

  1. 有什么方法可以让 dyld 打印时间戳吗?
  2. 如果不可能,我可以使用其他方法来分析 dyld 调用初始化函数的时间吗? DTraceInstruments 是否适用于此?
  3. 如有任何关于上述统计数据的建议,我们将不胜感激。

虽然我现在在 OSX 上工作,但也欢迎任何适用于 Windows 的工具或有用信息。

谢谢

最佳答案

你能用this technique吗? ?

我见过一个大型应用程序启动缓慢,它加载了大量的 dll 并进行了大量的初始化。采样会告诉您发生了什么,您可以修复它,这可能会让您大吃一惊。

例如,我永远不会猜到的是设置国际化字符串所花费的时间,其中很多是不需要的。另一个例子:不仅创建和初始化数据结构,而且销毁和重新创建它们,这是不必要的,因为在菜单、 TreeView 等中插入内容。

关于c++ - 如何分析 dyld 加载图像时调用初始化函数的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com