2012-07-10 102 views
3

我已經基於兩個文件創建了一個虛擬文件系統(非常類似fat)。從硬盤快速讀取

  1. 第一個文件 - 分配表。

IT賣場有關文件的分配信息(實際上它是不是文件,而是donnt關心它)

每個記錄有以下結構:

  1. 名稱 - 固定大小(100個字節)。第一個4個字節是字符串長度
  2. 長度 - 4個字節,文件的總長度
  3. STARTCLUSTER - 起始簇的4個字節的ID
  4. EndCluster - 端簇的4個字節的ID

每個條目具有固定大小,我有內存哈希表,這有助於我找到每個條目的位置。

  1. 第二個文件 - 虛擬光驅

VD基於集羣。每個羣集具有固定大小 - 256個字節。最後4個字節是指向文件鏈中下一個羣集的指針。

當我嘗試讀取所有文件時,問題是非常慢的速度。我怎樣才能提高性能?是否有任何提示快速讀取硬盤驅動器。

例如:大塊閱讀文件是好主意嗎?當我讀取文件的一小部分時,文件被操作系統緩存了嗎?在下一次,我只是從內存中獲取數據,而不是從HD中獲取數據?

那麼我有幾個這樣的問題,我可以得到答案?

+2

你看過內存映射文件嗎? – leppie 2012-07-10 06:06:54

+0

如果塊大小等於給定CPU/OS上的內存頁大小,則可以改進磁盤訪問。 – alexm 2012-07-10 06:27:01

+0

@leppie我的第二個文件非常分散。所以我需要經常隨機尋找閱讀。可以幫助我嗎? – Neir0 2012-07-10 06:54:02

回答

2

一些選項;

  • 你可以擴大你的簇大小(256個字節小,最OS'es使用4KB +爲羣集這些天)

  • 如果你讀了所有的文件,你可以做基於STARTCLUSTER排序所以你可以按照物理上彼此靠近的順序讀取文件。所以每當操作系統讀取一個4K +塊時,更有可能需要下一個文件的其他部分。

  • 你可以整理碎片的虛擬磁盤文件

  • 你看起來自信這是一個diskread問題。你剛剛看過文件後,你是否檢查過你對文件做了什麼不是很慢的部分?

  • 大量的隨機存取是SSD存儲閃耀的地方。將虛擬磁盤移動到SSD