我需要在iOS中加載文件,現在我使用+ [NSString stringWithContentsOfFile:]
。 這些文件大多是500kb到5mb。 我加載了一個約。 4mb大文件和樂器和秒錶告訴我它需要1.5秒來加載這個文件。在我看來它有點慢,有沒有辦法讓字符串更快?+ [NSString stringWithContentsOfFile:]性能
編輯:
我嘗試了一些東西,現在通知,NSString的的創作是我的問題,它需要的97%的時間,而不是從盤的實裝。
我需要在iOS中加載文件,現在我使用+ [NSString stringWithContentsOfFile:]
。 這些文件大多是500kb到5mb。 我加載了一個約。 4mb大文件和樂器和秒錶告訴我它需要1.5秒來加載這個文件。在我看來它有點慢,有沒有辦法讓字符串更快?+ [NSString stringWithContentsOfFile:]性能
編輯:
我嘗試了一些東西,現在通知,NSString的的創作是我的問題,它需要的97%的時間,而不是從盤的實裝。
如果您知道編碼或可以確定它(您現在使用的API是基本的),那麼您可以將它作爲一個char
緩衝區(以可識別編碼的方式)。
我會開始使用內存映射數據打開它(mmap
,你也可以使用NSData
來解決這個問題)。 madvise
可用於提示您將如何訪問該文件。
如果內存映射I/O佔用太多的內存供您使用,您應該下降到增量讀取,如CI/O設備 - fopen
,fread
,等等。這通常需要比存儲更多的I/O事件映射的數據(可能會慢得多,取決於數據的訪問方式)。
在這兩種情況下,你會認爲字符串作爲一個C字符串 - 不只是在打開整個文件轉換爲NSString
。
基金會有很多技巧,所以請確保這實際上提高了您的特定用例的性能。
如果這些解決方案太「核心供您使用,請考慮使用較小的文件(分割現有文件)。
問題是最後我需要零件本身作爲NSString – Sebastian 2013-03-13 15:24:10
@Sebastian是的 - 我看到了。你可以使用char表達式手動「解析」字符串,然後從chars的精確子範圍創建NSString。這可以最大限度地減少I/O,特別是如果你只需要一些文件的內容(你必須理解你的問題 - 如果使用不正確,我所建議的一切都可能會增加I/O)。另一種可能的方法是創建一個mmapped表達式,然後將返回的指針傳遞給映射內存到' - [NSString initWithBytesNoCopy:length:encoding:freeWhenDone:]'中。 – justin 2013-03-13 15:41:29
謝謝,幫我解決我的問題。不,我不得不提高字符串的使用性能:) – Sebastian 2013-03-13 15:49:22
什麼是「字符串」? – trojanfoe 2013-03-13 14:31:01
其某種類型的CSV數據 – Sebastian 2013-03-13 14:32:06
你是否在加載後將這個CSV「處理」成更好的數據結構? – trojanfoe 2013-03-13 14:34:28