如何讓 Xcode 在讀寫上提速100倍?

2021-07-31 03:45:50 字數 2169 閱讀 6850

問題**

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 的工作效率。問題是,怎麼實現?

實現方法

方法的思路很簡單,大概可以分兩步:

配置 ram。在記憶體中專門開出一塊讓 xcode 使用。

連線 xcode。讓 xcode 連線到我們開闢出來的專屬記憶體空間。

下面就是見證奇蹟的時刻。

第一步, 建立 .sh 檔案。**如下。

#!/bin/bash

ramdisk=」ramdisk」

size=1024

#size in mb for ramdisk.

diskutil erasevolume hfs+ $ramdisk \

`hdiutil attach -nomount ram://$[size*2048]`

mac下建立.sh指令碼檔案及其簡單應用 :

1、建立.sh指令碼檔案 首先我們需要建立乙個指令碼檔案,可以用文字編輯器或者其它工具建立,注意儲存為.sh格式。

2、賦予指令碼可執行的許可權

(1)、進入mac終端(快捷鍵:command+space,輸入terminal 回車);

(2)、進入ramdisk.sh檔案所在的目錄:命令:cd /users/mac/desktop (注意,cd 後面有乙個空格,後面是上面所建立的ramdisk.sh檔案所在的目錄);

(3)、賦予指令碼可執行許可權,輸入命令:chmod +x ramdisk.sh 回車。

第二步, 經過上述步驟,ramdisk.sh已經成為乙個可執行指令碼,輸入命令:./ramdisk.sh 回車,終端輸出如圖:

之後你會發現你會多出乙個叫 ramdisk 的記憶體空間,有大概 1 gb 大小。

第三步,連線 xcode。xcode -> preferences -> locations -> locations tab,配置 deriveddata。

advanced… 也要配置成下圖所示

以上就是全部步驟。這時候你就可以享受飛一般的開發了。現在 project 中所有檔案都在記憶體中,相比於 ssd,理論上是要快上乙個數量級。

注意事項

合理分配記憶體空間。我這裡分配了 1gb 的記憶體當硬碟使,是因為我電腦本身有 16gb 記憶體空間。假如你電腦記憶體只有 4gb,我不建議你使用這個方法,或者建議只分配 256m 空間給 xcode。總之,注意記憶體不足或溢位的情況。
參考

[原文](

如何讓 Xcode 在讀寫上提速100倍?

我們都知道 xcode 在執行或編譯時,會有大量的讀寫操作。例如從硬碟中呼叫,我們會這麼操作 let image uiimage named imagename 這時候 xcode 就會去電腦的硬碟中去找到,完成讀寫操作。類似的操作還有訪問檔案等等。如果這類讀取數量比較少,那麼無傷大雅,但是一旦多起...

PHP如何在讀寫 w 模式下建立臨時檔案?

php中的tmpfile 函式是乙個內建函式,用於在讀寫 w 模式下建立乙個具有唯一名稱的臨時檔案。使用tmpfile 函式建立的檔案在使用fclose 關閉或沒有對檔案控制代碼的剩餘引用時自動刪除。指令碼的末尾還會刪除使用tmpfile 函式建立的臨時檔案。tmpfile 函式不接受任何引數,它返...

PHP如何讀寫檔案

php讀寫檔案,就如同 asp中使用fso進行檔案的讀寫操作。當然在asp中fso僅對於執行當前程式的伺服器磁碟上檔案進行讀寫 很明顯就是需要獲得物理路徑 然而php可以通過ftp或http開啟檔案進行讀寫。一,php如何讀取檔案 php讀取檔案可以讀取當前伺服器或遠端伺服器中的檔案。其步驟是 開啟...