2012-10-21 50 views
2

我正在使用BinaryReader正在讀取二進制文件。我想用BufferedStream來計算緩衝輸入時的磁盤訪問次數。不幸的是,這個類是密封的,所以我不能重寫手動計算它的方法。從BufferedStream獲取磁盤訪問次數

有沒有使用標準庫的方法嗎?或者我必須寫我自己的緩衝BinaryReader來實現這一目標?

+2

數據可以緩存在用戶空間,操作系統,磁盤控制器中。我認爲你可以得到一個粗略的估計 –

+0

@ L.B:好的,讓我們假設每個緩衝區的重新填充都是一個磁盤訪問。那麼如何計算這個? – dulek

回答

1

您可以根據您在BufferedStream(Stream,int)構造函數中指定的緩衝區大小來計算它。默認值是4096字節。假設你不搜索(),文件訪問的數量是(filesize + bufsize - 1)/bufsize

總的來說,矯枉過正的方法是記住你可以鏈接流。創建您自己的Stream派生類並只計算需要從基礎流提供數據的Read()方法的調用次數。將該類的實例傳遞給BufferedStream構造函數。

這兩種方法都不能讓您找出操作系統多久訪問磁盤驅動程序並從磁盤物理傳輸數據。文件系統緩存位於兩者之間,實際數量很大程度上取決於文件數據如何映射到磁盤柱面和扇區。你會從性能計數器獲得有關這方面的信息。實際使用它幾乎沒有意義,你得到的數字在另一臺機器上將很難再現。

+0

這就是我在尋找的思維方式!很有效。 在演示各種合併排序算法時,我將在我的學術項目中使用它來模擬硬盤上的頁面。所以這個解決方案已經足夠了。 – dulek