Я пишу несколько программ на C для встроенной системы, где каждый бит производительности, который мы можем выжать, будет иметь значение. Частью этого является доступ к файлам журналов. При определении того, существует ли файл, существует ли разница в производительности между использованием open/fopen и stat? Я использовал stat, исходя из предположения, что он должен выполнить быструю проверку файловой системы, тогда как fopen должен будет фактически получить доступ к файлу и манипулировать внутренними структурами данных перед возвратом. Есть ли какая-то заслуга в этом?Производительность fopen vs stat
ответ
stat
, вероятно, лучше, поскольку ему не нужно выделять ресурсы для фактического чтения файла. Вам не нужно будет звонить fclose
, чтобы освободить эти ресурсы, и вы также можете воспользоваться кэшированием недавно проверенных файлов.
Если у вас есть сомнения, проверьте его. Время большой цикл, который проверяет 1000 файлов, используя каждый метод, с соответствующим сочетанием имен файлов, которые существуют и не существуют.
Если у вас есть исходный код для stat
и fopen
, вы должны быть в состоянии прочитать его и получить представление о том, для чего потребуется больше ресурсов.
stat действительно имел 3X лучшую производительность для проверки существования файла, чем fopen на наших встроенных ящиках, я был удивлен. Спасибо за предложение. –
stat() не создает никаких пользовательских структур данных памяти. Независимо от того, насколько агрессивна ваша политика кэширования, stat не будет пытаться предварительно прочитать данные файла. Я думаю, что stat() - более безопасная ставка.
Как насчет доступа()?
Если вы хотите выжать производительность по отношению к поиску файлов и открытию файлов, свести к минимуму количество звонков fopen
и stat
. Вызов файловой системы должен быть дороже, чем что бы то ни было во время выполнения, чтобы перевести его.
Для проверки существования файла, stat() будет предпочтительнее функции fopen().
Однако, в зависимости от вашей установки, было бы целесообразно использовать lstat() вместо stat().
Есть ли разница между stat и lstat, когда файл никогда не является символической ссылкой? –
@JosephGarvin - Не должно быть заметной разницы в производительности, когда файл никогда не является символической ссылкой. – Sparky
- 1. CURL vs fopen vs fsocketopen?
- 2. AAsset_read vs fopen
- 3. PHP: fopen vs streams
- 4. PHP file() vs fopen() + fgets() performance debate
- 5. Производительность - window.onscroll vs setInterval
- 6. URI vs Производительность файла
- 7. Производительность: NaCl vs Emscripten
- 8. Производительность char vs string
- 9. Производительность памяти vs Использование
- 10. Generics vs Производительность объекта
- 11. Производительность подзапроса vs join
- 12. CALayer vs. drawInRect: производительность?
- 13. Производительность System.IO.File vs System.IO.FileStream
- 14. .Net vs C++ (производительность)
- 15. Asp.net Vs Php Производительность
- 16. LINQ vs datasets - производительность?
- 17. Производительность: Pig vs Hive
- 18. Производительность: BufferedOutputStream vs FileWriter
- 19. Производительность phantom.js vs zombie.js
- 20. Производительность BitmapImage vs. ImageBrush
- 21. Производительность sprintf vs String.Format
- 22. Производительность: Geometry VS Shape
- 23. Производительность Encog vs Deeplearning4J
- 24. Весна - Развязка Vs Производительность
- 25. Производительность: Async vs Thread
- 26. Производительность MappedByteBuffer vs ByteBuffer
- 27. VARCHAR vs DECIMAL Производительность
- 28. PHP LOAD DATA INFILE VS Fopen
- 29. CreateFile vs fopen vs ofsteam преимущество и недостаток?
- 30. Javascript - Аргументы Vs Вложенные функции Vs Производительность
Было бы очень легко написать небольшую программу для проверки этого, что и должно быть сделано для всех проблем, связанных с производительностью. – 2010-04-15 16:41:18