我正在研究一個讀取大文本文件(可以達到5GB大小)的應用程序。目前,我使用fscanf來讀取文件,因爲我發現它是迄今爲止最快的。但是,讀取整個文件仍然需要相當長的時間。閱讀一個非常大的文件
是否有更快的方式從文件中讀取數據?
我正在研究一個讀取大文本文件(可以達到5GB大小)的應用程序。目前,我使用fscanf來讀取文件,因爲我發現它是迄今爲止最快的。但是,讀取整個文件仍然需要相當長的時間。閱讀一個非常大的文件
是否有更快的方式從文件中讀取數據?
首先,您應該避免將5GB文件作爲一個單獨的步驟讀入內存。記憶力的影響本身就會讓你遠離這種做法。相反,你應該嘗試採取另一種方法,例如:當您閱讀它
NSFileWrapper
(遠離萬能藥,但可以與上述結合使用; NSFileWrapper
自動執行內存映射)你應該得到一個性能基線開始:
time cat thebigfile.dat > /dev/null
這是很難想象讀取文件比快得多,所以這是你的地板。
你一定要在儀器上做一些性能分析,並確保問題在於閱讀而不是處理。特別是,內存分配可能會比您預期的要貴,特別是在多線程應用程序中。
一旦你研究了上述情況,你仍然需要對磁盤數據進行真正的快速管理,請看dispatch_io和dispatch_data。這是一個非常棒的高速數據管理工具。但是在擔心這種優化之前,先改進基本算法總是更好。
我想我最大的問題是處理,而不是閱讀部分,因爲我目前已經設置逐行閱讀。所以我想我應該改述我的問題。有什麼方法可以更快地處理數據?就像我有一百萬行,每一行都具有相同的屬性(名稱,日期等)......我想將每行存儲在一個數組中。有沒有更快的方法,然後只是做object.name = ...然後[ObjectArray addObject:object]? – Matt 2012-08-01 00:17:14
樂器說什麼?你的熱點在哪裏?直到你花了一些時間在樂器上,並且瞭解正在發生的事情,甚至不會開始優化。 – 2012-08-01 01:58:19
你可能想要使用'mmap':http://linux.die.net/man/2/mmap – 2012-07-30 16:08:06