2011-09-07 108 views
8

該文檔爲NSDataReadingOptions狀態:如何知道如果一個文件被「存儲在文件系統緩存」

NSDataReadingUncached

指示文件中的提示不應該被存儲在文件系統緩存。對於正在讀取和丟棄的數據,此選項可以提高性能。

這一切都有道理。我很好奇,如果有辦法知道文件是否已經駐留在文件sysem緩存中。

例如,如果我需要執行大量的文件讀取操作,優先考慮讀取已存在於緩存中的文件可能是有意義的。

+1

重點背後的想法是什麼?您需要讀取100個文件,10個讀取時間爲1秒,90個未讀取,2個讀取時間。無論閱讀順序如何,您總會發現需要190秒才能閱讀全部內容。 –

+2

啊,但如果我碰巧先讀取未緩存的內容,將其他內容從緩存中刪除,那麼所有內容都會取消緩存,總共花費200s –

回答

4

恐怕我們在這裏只能傳達一些假設,因爲沒有官方文檔可用。

  • 的IOS文件系統被認爲是分層文件系統(HFS)相同的OS-X之一(見iOS filesystem HFS?
  • HFS使用統一緩衝區高速緩存(UBC)
  • UBC緩存在文件中的數據而不是整個文件 - 這是第一點,即使文件的一部分被緩存,你可以不知道整個文件是否被緩存
  • 沒有任何API或內核命令控制UBC的內容(所以這回答你的問題無線否)。

一些有趣的鏈接閱讀:

你的選項,以確保文件可以快速訪問是在蘋果的同一文檔中描述的文件映射到虛擬內存的頁面。

+0

對不起,有人添加了令人困惑的標記,我對此感興趣所有Cocoa平臺,而不僅僅是iOS。儘管如此,我認爲它們在這種情況下表現相同,因爲文件系統基本相同。 –

+0

所以當你說沒有API來控制UBC的內容時,你是否包含任何類型的檢查作爲該權利的一部分?即我不想以任何方式編輯緩存,只是找到關於它的一些信息;也沒有API,對吧? –

+0

我從iOS的角度回答。在該操作系統下,肯定沒有公共API來收集有關緩存的更多信息。我收集了所有不在NDA之下的公開信息。 – MrTJ

相關問題