如何让xcode在读写上提速100倍?

李洪强 李洪强     2022-09-21     698

关键词:

如何让 Xcode 在读写上提速100倍?

技术分享

上个月参加了一场西雅图当地的线下 iOS 开发者聚会。Jeff Szuhay 作为一个有20+年开发经验的资深程序员,跟我讲了一套提高 iOS 开发效率的方法。相比于其他程序员在 App 启动时间、架构优化方面的经验,老爷子 Jeff 的优化基于硬件层面,匠心独运,极客风十足。以下是他的经验分享和我个人的实测。

问题来源

我们都知道 Xcode 在运行或编译时,会有大量的读写操作。例如从硬盘中调用图片,我们会这么操作:

let image = UIImage(named: "imageName")

这时候 Xcode 就会去电脑的硬盘中去找到图片,完成读写操作。类似的操作还有存取文件等等。如果这类读取数量比较少,那么无伤大雅,但是一旦多起来,尤其是大项目在后期产生了大量的 DerivedData 存在硬盘上,Xcode 在编译时就会花大量时间去硬盘(Disk)上完成读写这些数据的操作。更不幸的是有时候还会遇到硬盘故障等问题。

解决思路

正所谓“哪里需要优化,哪里就需要程序员”,Jeff 在这个时候作为一名白衣骑士登场了。多年的计算机研究让他对整个计算机架构非常熟悉。下图是他展示的计算机结构简图。

技术分享
计算机结构简图

此图简洁明了得说明了计算机的基本架构。左上角是计算机的大脑,CPU,负责核心计算和处理工作;右上角是内存(RAM),用来运行程序并与 CPU 进行数据交流;中间的线是总线,负责各个模块之间传递信息和信号;图下侧是基本的 System IO。

再回来看我们的问题:Xcode 现在是在 RAM 中运行,然后到 Storage 中读写数据,数据接着再传回 RAM。这种方式有两个瓶颈:

  • Storage 速度很慢。即使是最先进的 SSD,其速度也比 RAM 慢了400倍。也就是无论你怎么在软件层优化,其速度也无法突破 SSD 的瓶颈;
  • 数据要不停的在各个模块之间传递。传递过程中亦有延时和无谓的时间消耗。

针对以上两个瓶颈,Jeff 认为,如果我们可以让所有的读写操作都在内存(RAM)中完成,那么必然能大幅提高 Xcode 的工作效率。问题是,怎么实现?

实现方法

方法的思路很简单,大概可以分两步:

  1. 配置 RAM。在内存中专门开出一块让 Xcode 使用。
  2. 连接 Xcode。让 Xcode 连接到我们开辟出来的专属内存空间。

下面就是见证奇迹的时刻。

第一步, 创建 .sh 文件。代码如下。

#!/bin/bash
// 设置 ram disk 的名称
RAMDISK=”ramdisk”

// 设置 ram disk 的大小,这里是 1024 MB
SIZE=1024  

// 分配给 ramdisk 相应大小的空间
diskutil erasevolume HFS+ $RAMDISK `hdiutil attach -nomount ram://$[SIZE*2048]` 

// 打开元数据索引,如果你使用 Xcode 内部的调试工具这是必须的。因为调试工具使用元数据索引来查询符号连接
mdutil -i on /Volumes/$RAMDISK

第二步, 运行 .sh 文件。在命令行中敲下。

技术分享

之后你会发现你会多出一个叫 ramdisk 的内存空间,有大概 1 GB 大小。

技术分享

第三步,连接 Xcode。Xcode -> Preferences -> Locations -> Locations Tab,配置 DerivedData。

技术分享

Advanced... 也要配置成下图所示

技术分享

以上就是全部步骤。这时候你就可以享受飞一般的开发了。现在 Project 中所有文件都在内存中,相比于 SSD,理论上是要快上一个数量级。

注意事项

  • 合理分配内存空间。我这里分配了 1GB 的内存当硬盘使,是因为我电脑本身有 16GB 内存空间。假如你电脑内存只有 4GB,我不建议你使用这个方法,或者建议只分配 256M 空间给 Xcode。总之,注意内存不足或溢出的情况。

  • 只把 DerivedData 放在 Ram Disk 中。为了极限速度,你当然可以把 App 相关所有的文件都放在内存空间中。但是要知道,我们创造的 Ram Disk 本质是内存,当关机或重启的时候,在 Ram Disk 中的数据是会丢失的。而 DerivedData 是可以重新生成的,所以放在 Ram Disk 中可以最大限度的提高 Xcode 开发中的读取速度,且十分安全。


用taichi加速python:提速100+倍!(代码片段)

Python已经成为世界上最流行的编程语言,尤其在深度学习、数据科学等领域占据主导地位。但是由于其解释执行的属性,Python较低的性能很影响它在计算密集(比如多重for循环)的场景下发挥作用,实在让人... 查看详情

import一个“太极”库,让python代码提速100倍!

丰色发自凹非寺量子位|公众号QbitAI众所周知,Python的简单和易读性是靠牺牲性能为代价的——尤其是在计算密集的情况下,比如多重for循环。不过现在,大佬胡渊鸣说了:只需import一个叫做“Taichi”的库,就... 查看详情

import一个“太极”库,让python代码提速100倍!

丰色发自凹非寺量子位|公众号QbitAI众所周知,Python的简单和易读性是靠牺牲性能为代价的——尤其是在计算密集的情况下,比如多重for循环。不过现在,大佬胡渊鸣说了:只需import一个叫做“Taichi”的库,就... 查看详情

胡渊鸣:import一个“太极”库,让python代码提速100倍!

丰色发自凹非寺量子位|公众号QbitAI众所周知,Python的简单和易读性是靠牺牲性能为代价的——尤其是在计算密集的情况下,比如多重for循环。不过现在,大佬胡渊鸣说了:只需import一个叫做“Taichi”的库,就... 查看详情

你敢信!?几行代码让swift数组初始化提速440+倍!

...容,这往往是一个耗时操作,数组越大时间越长。那么,如何最大限度的缩短数组的初始化时间呢?如上所示,在初始化1w个元素的数组时,我们的3种方法分别耗时为:53.855秒0.36秒0.12秒最快加速高达448倍!那么,如何实现如此... 查看详情

python调用c语言实现数独计算逻辑提速100倍(代码片段)

之前我们实现python自动玩数独游戏,详见:《让程序自动玩数独游戏让你秒变骨灰级数独玩家》链接:https://blog.csdn.net/as604049322/article/details/118583461最终达到了这样的效果:中间我们将一个超难的数独,程序计... 查看详情

deepmind用新ai超越自己:提速200倍,在所有雅达利游戏上胜过人类

...能体MEME,在效果不变的前提下,比两年前的Agent57提速了200倍!Agent57,是DeepMind在2020年搞的一个智能体,史上首次在所有57个雅达利游戏中超过了人类基准表现。但它有一个致命 查看详情

用上pytorchlightning的这六招,深度学习pipeline提速10倍!

金磊发自凹非寺量子位报道|公众号QbitAI面对数以亿计的图片数据,到底该用什么样的方法才能快速搞实验?这样的问题,或许在做机器学习研究的你,也会经常遇到。而就在最近,一个国外小哥就提出了一种... 查看详情

提速10倍!深度解读字节跳动新型云原生sparkhistoryserver

...文件,它在缩小了近乎10倍体积的基础上,居然还实现了提速10倍!!!目前,UIMetaService已经取 查看详情

一个让gitclone提速几十倍的小技巧(实用!)

不知道大家有没有遇到比较大的项目,gitclone很慢很慢,甚至会失败的那种。大家会怎么处理的呢?可能会考虑换一个下载源,可能会通过一些手段提高网速,但是如果这些都试过了还是比较慢呢?今天我... 查看详情

你敢信!?几行代码让swift数组初始化提速400多倍!

...容,这往往是一个耗时操作,数组越大时间越长。那么,如何最大限度的缩短数组的初始化时间呢?如上所示,在初始化1w个元素的数组时,我们的3种方法分别耗时为:53.855秒0.36秒0.12秒最快加速高达448倍!那么,如何实现如此... 查看详情

本科生新算法打败nerf,不用神经网络照片也能动起来,提速100倍|开源

...同样的效果,而且速度还快了100倍!那么他们是如何做到这点的呢?由NeRF到Plenoxels的进化为了帮助大家理解Plenoxels,我们先来简单介绍一下NeRF模型。要准备NeRF的数据,我们首先需要一部相机。拍了很多张各... 查看详情

本科生新算法打败nerf,不用神经网络照片也能动起来,提速100倍|开源

...同样的效果,而且速度还快了100倍!那么他们是如何做到这点的呢?由NeRF到Plenoxels的进化为了帮助大家理解Plenoxels,我们先来简单介绍一下NeRF模型。要准备NeRF的数据,我们首先需要一部相机。拍了很多张各... 查看详情

如何让自动布局在 Xcode 中工作

】如何让自动布局在Xcode中工作【英文标题】:howtogetautolayouttoworkinXcode【发布时间】:2013-07-3120:36:50【问题描述】:我查看了http://developer.apple.com/library/ios/#recipes/xcode_help-interface_builder/articles/UnderstandingAutolayout.html,但解释很模糊... 查看详情

如何让 Xcode 在我的 Mac Sierra (10.12.6) 上运行

】如何让Xcode在我的MacSierra(10.12.6)上运行【英文标题】:HowcanIgetXcodeworkingonmyMacSierra(10.12.6)【发布时间】:2018-07-1815:27:07【问题描述】:我似乎陷入了MacOS/Xcode的炼狱。我在OSSierra/10.12.6上。当我尝试更新时,我收到一条警告,指... 查看详情

加州理工华人博士提出傅里叶神经算子,偏微分方程提速1000倍,告别超算!

点上方人工智能算法与Python大数据获取更多干货在右上方 ··· 设为星标 ★,第一时间获取资源仅做学术分享,如有侵权,联系删除转载于:新智元偏微分方程存在于生活中的方方面面,但这个方程通常需... 查看详情

在 Xcode 6.1 中,我有两个导航按钮。但它们在故事板上不再可见。我如何让他们回来?

...中,我有两个导航按钮。但它们在故事板上不再可见。我如何让他们回来?【英文标题】:InXcode6.1Ihavetwonavigationbuttons.ButtheyarenotvisibleontheStoryboardanymore.HowdoIgetthemback?【发布时间】:2015-02-2204:43:09【问题描述】:所以我现在一直... 查看详情

深度学习提速10倍!

点上方人工智能算法与Python大数据获取更多干货在右上方 ··· 设为星标 ★,第一时间获取资源仅做学术分享,如有侵权,联系删除转载于:量子位面对数以亿计的图片数据,到底该用什么样的方法才能快... 查看详情