2010-04-15 75 views
2

我正在爲嵌入式系統編寫幾個C程序,我們可以擠出的每一點性能都很重要。其中的一部分就是訪問日誌文件。當確定文件是否存在時,在使用open/fopen和stat之間是否有任何性能差異?我一直在使用stat,因爲它只需要對文件系統進行快速檢查,而fopen必須在返回之前實際訪問文件並操作內部數據結構。這有什麼好處嗎?fopen vs stat的性能

+6

編寫一個小程序來測試這一點非常簡單,這是您應該爲所有與性能相關的問題做的事情。 – 2010-04-15 16:41:18

回答

6

stat可能會更好,因爲它不必爲實際讀取文件分配資源。您無需撥打fclose即可釋放這些資源,並且您還可以從緩存最近檢查過的文件中受益。

如果有疑問,請測試一下。時間是一個大循環,使用每種方法檢查1000個文件,並存在和不存在適當的文件名組合。

如果您有statfopen的源代碼,您應該可以通讀它並瞭解哪些需要更多資源。

+1

stat在我們的嵌入式盒子上實際上比檢查文件存在性能要好3倍,我有點驚訝。感謝您的建議。 – 2010-04-15 20:53:25

3

stat()不會創建任何用戶端內存數據結構。無論您的緩存策略多麼激進,stat都不會嘗試預先讀取文件的數據。我認爲stat()是一個更安全的賭注。

如何訪問()?

1

如果您想擠出查詢文件存在和打開文件的性能,請儘量減少調用fopenstat的次數。對文件系統的調用應該比運行時翻譯它的任何代價都要昂貴。

0

對於僅測試文件存在,stat()將優於fopen()。

但是,根據您的設置,使用lstat()而不是stat()可能是值得的。

+0

當文件從不是符號鏈接時,stat和lstat之間是否存在性能差異? – 2015-09-23 19:55:50

+0

@JosephGarvin - 當文件永遠不是符號鏈接時,應該沒有任何明顯的性能差異。 – Sparky 2015-09-23 21:07:48