我正在爲嵌入式系統編寫幾個C程序,我們可以擠出的每一點性能都很重要。其中的一部分就是訪問日誌文件。當確定文件是否存在時,在使用open/fopen和stat之間是否有任何性能差異?我一直在使用stat,因爲它只需要對文件系統進行快速檢查,而fopen必須在返回之前實際訪問文件並操作內部數據結構。這有什麼好處嗎?fopen vs stat的性能
回答
stat
可能會更好,因爲它不必爲實際讀取文件分配資源。您無需撥打fclose
即可釋放這些資源,並且您還可以從緩存最近檢查過的文件中受益。
如果有疑問,請測試一下。時間是一個大循環,使用每種方法檢查1000個文件,並存在和不存在適當的文件名組合。
如果您有stat
和fopen
的源代碼,您應該可以通讀它並瞭解哪些需要更多資源。
stat在我們的嵌入式盒子上實際上比檢查文件存在性能要好3倍,我有點驚訝。感謝您的建議。 – 2010-04-15 20:53:25
stat()不會創建任何用戶端內存數據結構。無論您的緩存策略多麼激進,stat都不會嘗試預先讀取文件的數據。我認爲stat()是一個更安全的賭注。
如何訪問()?
如果您想擠出查詢文件存在和打開文件的性能,請儘量減少調用fopen
和stat
的次數。對文件系統的調用應該比運行時翻譯它的任何代價都要昂貴。
對於僅測試文件存在,stat()將優於fopen()。
但是,根據您的設置,使用lstat()而不是stat()可能是值得的。
當文件從不是符號鏈接時,stat和lstat之間是否存在性能差異? – 2015-09-23 19:55:50
@JosephGarvin - 當文件永遠不是符號鏈接時,應該沒有任何明顯的性能差異。 – Sparky 2015-09-23 21:07:48
- 1. CURL vs fopen vs fsocketopen?
- 2. AAsset_read vs fopen
- 3. fopen vs流
- 4. SplFileObject vs PHP中的fopen
- 5. Ç的fopen VS開放
- 6. 改善fopen/fclose場景中的性能
- 7. UNION VS性能
- 8. PHP不能的fopen
- 9. UPDATE VS COUNT VS SELECT性能
- 10. 使用「r +」在fopen上windows vs linux
- 11. NHibernate HQL vs CriteriaAPI vs QueryOver vs Linq。性能
- 12. HTML - 屬性VS性能
- 13. 性能:UIImage的VS的UIView
- 14. AS3 vs JPG vs PNG的CPU性能
- 15. Mono vs VS下的Ilnumerics性能
- 16. VARCHAR vs DECIMAL性能
- 17. strftime性能vs snprintf
- 18. Columnstore vs. Hekaton性能
- 19. 性能:NaCl vs Emscripten
- 20. DataContractSerializer vs BinaryFormatter性能
- 21. Qt vs GTK +性能
- 22. 性能Encog vs Deeplearning4J
- 23. nchar vs nvarchar性能
- 24. SimpleXML vs DOMDocument性能
- 25. bluebird vs async.js性能
- 26. 性能Image.SCALE_DEFAULT vs Image.SCALE_SMOOTH
- 27. OpenCL vs OpenMP性能
- 28. web_reg_find vs strstr()。性能
- 29. 。嘗試VS &&性能
- 30. 性能:WPF vs Silverlight
編寫一個小程序來測試這一點非常簡單,這是您應該爲所有與性能相關的問題做的事情。 – 2010-04-15 16:41:18