Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Написал чудесную программу, которая читает файлы размером ~500Мб (в файле ~ 10 млн строк ). Профайлер показал, что около 2/3 времени работы занимает I/O. Поэтому я попытался оптимизировать работу, протестировав 3 варианта программы (в скобках указано время выполнения программы в два потока): 1. Классический метод С++ std::ifstream + getline() ( 161 505, 160 876 ) 2. Отображение ВСЕГО файла в память средствами Qt: QFile + QByteArray + QBuffer + Buffer.readLine() ( 273 488, 296 010 ) 3. Map- инг файла в память средствами Qt: QFile + File.map() ( 157 117, 159 959 ) Однопоточный тест дает такие же результаты (но я изначально ориентируюсь на многопоточную работу). У меня классический жесткий диск (не SSD) с буфером 64 Мб и поддержкой упреждающего чтения. Будет ли прирост производительности от SSD диска , если учесть, что на разделе очень много свободного места, а значит файлы не фрагментированы и следовательно работа идет через буфер диска? Какие еще есть хитрые способы быстрого чтения больших файлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 12:48 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Тебе во первых нужно знать свое железо. И понимать где есть та верхняя граница когда стоит остановиться и не мучать софт странными пожеланиями. Померяй скорость копирования твоего файла в NULL или в /dev/null на линуксе. И отталкивайся от этого числа. Для однопоточного приложения будет формула где это время разделится на собственно I/O и работу одного раунда твоего парсера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 13:00 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
maytonТебе во первых нужно знать свое железо. И понимать где есть та верхняя граница когда стоит остановиться и не мучать софт странными пожеланиями. Померяй скорость копирования твоего файла в NULL или в /dev/null на линуксе. И отталкивайся от этого числа. Для однопоточного приложения будет формула где это время разделится на собственно I/O и работу одного раунда твоего парсера. Выполнил замер такого куска кода (копирование с диска в оперативку и освобождение оперативки при выходе из функции): Код: plaintext 1. 2. 3. Получил время выполнения 158 836 и 165 079 мсек . Значит быстрее этих цифр на текущей связке железо + ОС я не прыгну. Тогда вопрос про SSD: будет прирост производительности при его использовании или ограничение идет на уровне интерфейса SATA? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 13:25 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLВыполнил замер такого куска кода (копирование с диска в оперативку мопжежвашуять...цопи филе нуль Код: plaintext 1. 2. 3. ~110МБ/сек, что меньше ограничений SATA-1 (~150МБ/сек) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 14:12 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAlekseySQLВыполнил замер такого куска кода (копирование с диска в оперативку мопжежвашуять...цопи филе нуль Код: plaintext 1. 2. 3. ~110МБ/сек, что меньше ограничений SATA-1 (~150МБ/сек) Что значат ваши замеры на древнем диске- непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 16:01 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Сходил я купил этот SSD. Выложил примерно 3500 кровных. Ну что вам сказать ребятки... А все получилось! Ура!!! Теперь тест чтения файлов с диска в память и ее освобождение выполняется за 41 395 и 41 146 мсек (примерно в 4 раза быстрее)! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:43 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLСходил я купил этот SSD. Выложил примерно 3500 кровных. Ну что вам сказать ребятки... А все получилось! Ура!!! Теперь тест чтения файлов с диска в память и ее освобождение выполняется за 41 395 и 41 146 мсек (примерно в 4 раза быстрее)! А если еще и руками сделать..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:49 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Можешь потестить мой block_read.h . Писал для быстрого чтения больших текстовых файлов. Топик тут Примеры исходников там же можешь посмотреть uniq-crc.cpp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 19:59 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLСходил я купил этот SSD. Выложил примерно 3500 кровных. Ну что вам сказать ребятки... А все получилось! Ура!!! Теперь тест чтения файлов с диска в память и ее освобождение выполняется за 41 395 и 41 146 мсек (примерно в 4 раза быстрее)! Дружище, это порочный путь. Остался пустяк... написать в Requirements, что твой софт работает только на SSD... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:34 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
maytonДружище, это порочный путь. Остался пустяк... написать в Requirements, что твой софт работает только на SSD... Именно поэтому я сначала тестил разные алгоритмы без покупки нового железа. Кстати, за те самые 160 секунд у меня обрабатывались текстовые файлы общим весом 16,2 ГБ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:52 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЧто значат ваши замеры на древнем диске- непонятно.5400rpm это уже не древний диск - вы отстали от жизни. Но главное даже не это: Код: plaintext 1. интерпретатор, заметьте Код: txt 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 22:59 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov5400rpm это уже не древний диск - вы отстали от жизни. Но главное даже не это: Код: plaintext 1. интерпретатор, заметьте Код: txt 1. 2. 3. 4. 5. 6. 7. 8. Опять что- то непонятное написано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:34 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLОпять что- то непонятное написано...Чтение полугигабайта не должно занимать ни сто секунд, ни тридцать. Даже если у вас нет твердотельного диска. Практика показывает, что и не занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2018, 23:51 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAlekseySQLОпять что- то непонятное написано...Чтение полугигабайта не должно занимать ни сто секунд, ни тридцать. Даже если у вас нет твердотельного диска. Практика показывает, что и не занимает. Я читаю не полгигабайта, а 16,2 ГБ. Полгигабайта- размер одного файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 09:03 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLНаписал чудесную программу, которая читает файлы размером ~500Мб (в файле ~ 10 млн строк ). Профайлер показал, что около 2/3 времени работы занимает I/O. Так программа, которая что-то читает, и так всегда будет висеть на одном IO. Это нормально. AlekseySQLКакие еще есть хитрые способы быстрого чтения больших файлов? Никаких. Если не будешь читать побайтово, то все остальные способы будут примерно одинаково быстры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:07 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Dima TМожешь потестить мой block_read.h . Писал для быстрого чтения больших текстовых файлов. Топик тут Примеры исходников там же можешь посмотреть uniq-crc.cpp Вот если бы эта чудная разработка параллельно читала блоки данных с разных винтов (по мере их освобождения от предыдущего чтения), и создавала единую последовательность данных в памяти, то цены бы ей не было! А так, не сильно понятно чем отличается от классического map, который читает страницами по 4кБ. Например, у меня 4 кб вмещают примерно 80 строк текстового файла, так что если бы этот подход давал прирост в скорости чтения, то и на map было бы все видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 17:46 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLDima TМожешь потестить мой block_read.h . Писал для быстрого чтения больших текстовых файлов. Топик тут Примеры исходников там же можешь посмотреть uniq-crc.cpp Вот если бы эта чудная разработка параллельно читала блоки данных с разных винтов (по мере их освобождения от предыдущего чтения), и создавала единую последовательность данных в памяти, то цены бы ей не было! А так, не сильно понятно чем отличается от классического map, который читает страницами по 4кБ. Например, у меня 4 кб вмещают примерно 80 строк текстового файла, так что если бы этот подход давал прирост в скорости чтения, то и на map было бы все видно. Можно и map, только скорость не в этом. Отличие там не в чтении, а в разборе на строки. Там для разбиения на строки простейший поиск конца строки. В итоге получилось намного быстрее штатного fgets(). В топике вроде писал на сколько ускорилось, найти не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:29 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
MasterZivНикаких. Если не будешь читать побайтово, то все остальные способы будут примерно одинаково быстры.Не согласен. Сколько ни тестили (и мы на этом форуме в том числе), стримы серьезно, чуть не в разы проигрывают даже fread. Причина мне непонятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:44 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
SiemarglMasterZivНикаких. Если не будешь читать побайтово, то все остальные способы будут примерно одинаково быстры.Не согласен. Сколько ни тестили (и мы на этом форуме в том числе), стримы серьезно, чуть не в разы проигрывают даже fread. Причина мне непонятна. Хочешь сказать, что чтение средствами языка С (с использованием FILE) обгононяет чтение средствами языка С++ (с использованием ifstream и ofstream)? Кстати, а чем система ввода/вывода С++ лучше, чем в С? Прохоренок, например, в своей книге говорит, что надо отдать предпочтение первой, не поясняя почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:25 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Dima TМожно и map, только скорость не в этом. Отличие там не в чтении, а в разборе на строки. Там для разбиения на строки простейший поиск конца строки. В итоге получилось намного быстрее штатного fgets(). В топике вроде писал на сколько ускорилось, найти не смог. У меня именно с map поиск конца строки (в одной большой строке) используется: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. И никакого прироста производительности не замечено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:30 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Я просто оставлю это здесь... Code : Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. ReadLen:671392842 -- 640 МБ (671 392 842 байт) ЗА 0,832291 секунд. WinApi функция - ReadFile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:20 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Притом у меня обычный HDD 2010 года, дешёвого компьютера. И процессор Intel® Celeron® Processor E3300 (1M Cache, 2.50 GHz, 800 MHz FSB) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:21 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Няшик, Изыди из топика! Или на ++билдере перепиши =) (Тоже грех, но мелок) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:24 |
|
||
|
Как быстро читать большие тексовые файлы?
|
|||
|---|---|---|---|
|
#18+
Няшик, Дополнительно замечу, что у местной богемы такой металлолом не наблюдается. Секи тему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:25 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017991]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 155ms |

| 0 / 0 |
