深入理解WWDC16 Session 406:优化应用启动时间

需积分: 10 0 下载量 169 浏览量 更新于2024-07-16 收藏 2.66MB PDF 举报
“WWDC session 406_optimizing_app_startup_time.pdf”是关于iOS应用启动优化的一份资料,主要讲解了mach-o文件格式、动态库加载流程以及如何进行启动时间的优化。 在iOS应用开发中,优化启动时间对于提供良好的用户体验至关重要。这份资料首先介绍了在程序启动前发生的所有活动,这些活动在C语言的`main()`函数执行之前就已经开始。`main()`函数是程序的入口点,但在它之前,系统已经完成了许多准备工作。 Mach-O(Mach Object)是苹果操作系统中的一种二进制文件格式,用于存储编译后的代码和数据。资料详细阐述了Mach-O的结构,包括它的组成和作用。Mach-O文件主要有三种类型: 1. 可执行文件(Executable):这是应用程序的主要二进制文件,包含了运行时需要的代码和数据。 2. 动态库(Dylib):动态链接库允许多个应用程序共享同一段代码,从而节省内存并便于更新。dylib文件在运行时被加载到进程的地址空间中。 虚拟内存(Virtual Memory)基础也在资料中有所涉及。虚拟内存是一种内存管理技术,它将物理内存与硬盘上的虚拟内存页相结合,使得每个进程都有独立的、连续的地址空间。在iOS设备上,虚拟内存管理对于确保应用程序高效运行和防止内存冲突至关重要。 在实际应用中,资料指导开发者如何测量应用的启动时间,并提供了优化启动时间的策略。这可能包括减少加载的资源数量、延迟非关键资源的加载、优化代码结构以及利用各种工具和技巧来分析和改进启动过程。 此外,资料还涵盖了dyld(动态链接器)的工作原理,dyld负责在程序启动时加载和解析Mach-O文件,连接符号引用,以及处理动态库的加载。了解dyld的工作机制有助于开发者更有效地进行性能优化。 这份WWDC session 406的资料是iOS开发者深入理解应用启动过程,特别是对启动时间有严格要求的开发者的一份宝贵资源。通过学习,开发者可以掌握理论知识,如Mach-O格式和虚拟内存,同时也能获得实践中的测量和优化技巧,以确保应用能够快速、流畅地启动。

bs_data = w_data[w_data['波束场景No'] == cross_data['波束场景No'][0]] 报错:Traceback (most recent call last): File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3652, in get_loc return self._engine.get_loc(casted_key) File "pandas\_libs\index.pyx", line 147, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\index.pyx", line 176, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\hashtable_class_helper.pxi", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\_libs\hashtable_class_helper.pxi", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: '波束场景No' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 127, in <module> data = optimizing() File "D:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 18, in __init__ self.optimizing_main() File "D:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 120, in optimizing_main self.child2=self.mutation_cdata(fitness_data,self.cross_data) File "D:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 86, in mutation_cdata bs_data = w_data[w_data['波束场景No'] == cross_data['波束场景No'][0]] File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\frame.py", line 3761, in __getitem__ indexer = self.columns.get_loc(key) File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3654, in get_loc raise KeyError(key) from err KeyError: '波束场景No'

2023-07-14 上传

(random.randint(0, bs_data[12]-1))*3+bs_data[8] 报错:Traceback (most recent call last): File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3652, in get_loc return self._engine.get_loc(casted_key) File "pandas\_libs\index.pyx", line 147, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\index.pyx", line 176, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\hashtable_class_helper.pxi", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\_libs\hashtable_class_helper.pxi", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 12 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "d:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 128, in <module> data = optimizing() File "d:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 15, in __init__ self.optimizing_main() File "d:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 124, in optimizing_main self.child2=self.mutation_cdata(fitness_data,self.cross_data) File "d:\Users\z84259074\PycharmProjects\参数自优化\self_optimizing.py", line 92, in mutation_cdata print('cross_data[波束场景No]',bs_data[12]) File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\frame.py", line 3761, in __getitem__ indexer = self.columns.get_loc(key) File "C:\Users\z84259074\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3654, in get_loc raise KeyError(key) from err KeyError: 12

2023-07-14 上传

0. Metadata/Provenance study.set_user_attr('pykeen_version', get_version()) study.set_user_attr('pykeen_git_hash', get_git_hash()) # 1. Dataset # FIXME difference between dataset class and string # FIXME how to handle if dataset or factories were set? Should have been # part of https://github.com/mali-git/POEM_develop/pull/483 study.set_user_attr('dataset', dataset) # 2. Model model: Type[Model] = get_model_cls(model) study.set_user_attr('model', normalize_string(model.__name__)) logger.info(f'Using model: {model}') # 3. Loss loss: Type[Loss] = model.loss_default if loss is None else get_loss_cls(loss) study.set_user_attr('loss', normalize_string(loss.__name__, suffix=_LOSS_SUFFIX)) logger.info(f'Using loss: {loss}') # 4. Regularizer regularizer: Type[Regularizer] = ( model.regularizer_default if regularizer is None else get_regularizer_cls(regularizer) ) study.set_user_attr('regularizer', regularizer.get_normalized_name()) logger.info(f'Using regularizer: {regularizer}') # 5. Optimizer optimizer: Type[Optimizer] = get_optimizer_cls(optimizer) study.set_user_attr('optimizer', normalize_string(optimizer.__name__)) logger.info(f'Using optimizer: {optimizer}') # 6. Training Loop training_loop: Type[TrainingLoop] = get_training_loop_cls(training_loop) study.set_user_attr('training_loop', training_loop.get_normalized_name()) logger.info(f'Using training loop: {training_loop}') if training_loop is SLCWATrainingLoop: negative_sampler: Optional[Type[NegativeSampler]] = get_negative_sampler_cls(negative_sampler) study.set_user_attr('negative_sampler', negative_sampler.get_normalized_name()) logger.info(f'Using negative sampler: {negative_sampler}') else: negative_sampler: Optional[Type[NegativeSampler]] = None # 7. Training stopper: Type[Stopper] = get_stopper_cls(stopper) if stopper is EarlyStopper and training_kwargs_ranges and 'epochs' in training_kwargs_ranges: raise ValueError('can not use early stopping while optimizing epochs') # 8. Evaluation evaluator: Type[Evaluator] = get_evaluator_cls(evaluator) study.set_user_attr('evaluator', evaluator.get_normalized_name()) logger.info(f'Using evaluator: {evaluator}') if metric is None: metric = 'adjusted_mean_rank' study.set_user_attr('metric', metric) logger.info(f'Attempting to {direction} {metric}')解释

2023-06-08 上传