2013-05-27 57 views
0

如果我們取一個特定大小的文件,哪個操作的執行速度會更快?讀取整個內容或將內容寫入文件。性能對打開文件的模式有任何依賴性。哪個文件操作更快,讀取或寫入

+2

讀取會更快 –

+3

這實際上與C++沒有任何關係,但具有存儲介質(如硬盤)和操作系統的特性。 –

+3

在寫入文件系統時可能會緩存寫入操作,並儘早完成文件寫入操作。所以我不能保證閱讀速度更快。在讀取緩存時通常可能不包含該文件,並且必須發生物理讀取。寫作的實際工作當然要多得多。 _(這一切都沒有經驗支持。)_ –

回答

1

我有點驚訝,因爲這個問題沒有什麼意義,只要如果你有寫如果讀取速度更快(反之亦然),它並不能幫助。無論如何,你必須做你必須做的事情。

這就是說,寫作通常比較慢。我說「通常」是因爲你不一定看到直接閱讀和寫作的速度。

C++中的讀寫操作在應用程序級別進行緩衝,並且(通常)在操作系統級別進行緩衝。因此,您所看到的「寫入速度」相當於將數據複製到緩衝區的速度,並最終將緩衝區刷新到操作系統。

這個詭辯放在一邊,寫作(通常)比閱讀慢,因爲這是設備的工作方式。硬盤只能寫入完整的集羣,而固態硬盤只能寫入整個集羣組(通常在512kB左右)。這意味着定期寫作需要讀取先前寫入數據的完整「單元」,對其進行修改,然後寫回整個單元。此外,它可能(在某些設備上)需要重新讀取數據以確保其成功寫入。這明顯是必須比閱讀慢。

請注意,操作系統在很大程度上會合並寫入,因爲寫入通常由虛擬內存子系統懶惰地執行,除非您明確要求同步。讀操作也是如此,因爲虛擬內存系統通常會預設大量數據(通常大約在64-128kB之間)。因此,除非您的讀/寫是巨大的,否則您看到的任何時序都不對應於真正的讀/寫時序。