Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Допустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз. Как можно это сделать? Если есть ещё более быстрый способ -- ещё лучше. я знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2015, 22:35 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
И ещё вопрос: почему файл с Код: plaintext 1. числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2015, 22:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereДопустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз.Правильно, читаешь блок байтиков и расшифровываешь их из буфера в массив. log_hereя знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ?Самостоятельно написать аналог, но убрать из него все проверки на ошибки чтения и расшифровки, а потом молиться что ошибки не случаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 01:57 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here...Как можно это сделать?...есть ли более быстрый способ? тут очень важно знать - что хотите получить на выходе? Если например Вам нужно отсортировать их - то всё гораздо проще :) если речь вести чисто о чтении с диска, то надо читать как можно более элементарными средствами оси блоками размером соизмеримыми по времени обработке с временем чтения этих блоков. Это и будет оптимум (подсказка дня - почему индексные страницы у локальных баз данных единицы килобайт?). удачи вам (круглый) ЗЫ А что значит запись 1024 * 1024 / sizeof(int) ???? это типа 1 048 576 интов или 1 048 576 разделить на размерность инта ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 01:57 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
kolobok0тут очень важно знать - что хотите получить на выходе? Если например Вам нужно отсортировать их - то всё гораздо проще :) Например, хочу прочесть и пересчитать какие-то особенные элементы (скажем, бОльшие, чем 100). kolobok0ЗЫ А что значит запись 1024 * 1024 / sizeof(int) ???? 1 048 576 разделить на размерность инта ???? вторая версия -- правильная. Правильно, читаешь блок байтиков и расшифровываешь их из буфера в массив. Ну так я и прошу простейший способ (код) того, как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 02:40 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here...прочесть и пересчитать какие-то особенные элементы (скажем, бОльшие, чем 100). 1 048 576 разделить на размерность инта ...как это сделать. 1) эту задачу необходимо сразу делать по ходу чтения(на это как бы намекает большие величины для хранения всего).. 2) а теперь переведите свой вопрос на русский: ...почему файл с (1 048 576 разделить на размерность инта) числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? в переводе вопроса, необходимо указать а) размерность инта б) тип числа в который пишется (1 048 576 разделить на размерность инта) 3) как это сделать = цикл. в цикле чтение фрагмента файла, вычисление того чего нужно. написать код, запостить сюда, Вам укажут на недочёты и в какую сторону двигаться дальше... ну либо в раздел работа и нанимаете того, кто это сделает за бабки. но лучше самому... удачи вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 02:58 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereЕсли есть ещё более быстрый способ -- ещё лучше. Есть: один поток читает блоками, второй обрабатывает. Т.к. самое узкое место тут чтение с диска, то оно должно быть непрерывным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:04 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima Tодин поток читает блоками, второй обрабатывает. Человек простое чтение и обработку написать не может, а ты ему предлагаешь потоки синхронизировать?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:06 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here, лучшее - враг хорошего. Напиши макет который хоть как-то работает и опубликуй его в форуме. Далее по обстановке неравнодушные энтузиасты предложат тебе решение по оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Но, как я указывал, здесь элементы заходят по одному, а не пачкой, что гораздо медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:15 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereздесь элементы заходят по одному, а не пачкой, что гораздо медленнее. Во-первых, увеличь ему буфер до 32-64к, как показано здесь: http://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf Во-вторых, избавься от набивания чисел в список, это медленная операция. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:26 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, buf1 работает быстрее buf2 всего лишь в 2 раза, а не в 10, как я ожидал. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Избавься от getline. Каков результат в мегабайтах в секунду? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:08 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, как избавляться от getline? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. время только увеличилось. про время: в файле input.txt 1 000 000 элементов, читается за 1.3 с и 2.6 с соответствунно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:25 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereкак избавляться от getline? Используй массив char вместо string и file.getline. Какую букву из "мегабайты в секунду" ты не понял?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:30 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
7.8 МБ / 1.3 c = 6 МБ/c и 7.8 МБ / 2.6 c = 3 МБ/c сообветственно. Dimitry SibiryakovИспользуй массив char вместо string и file.getline. Не мог бы расписать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:43 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereНе мог бы расписать? Читаешь блок X байт (символов). Дальше разбираешь посимвольно. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 0 замени на недопустимое значение, если невозможно - добавь флаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 18:45 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Тесты, что я видел, показывают что потоки (iostreams) С++ работают довольно медленно. Соответственно, хотите скорость - читайте и парсите напрямую. Хотя почему так - хз, они не для скорости предназначены изначально. Кому надо, пусть ковыряет подробности. Я как-то смотрел генерированный ассемблер, он был ужасен =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 23:38 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Написал так, работает быстрее. Только как понять, что достигнут конец файла, ведь так можно до бесконечности цикл с "i" проходить? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 23:55 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Посмотри как тут пишут. http://www.cplusplus.com/reference/istream/istream/read/ Вообще по настоящему перформить с файлами надо без std. IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 00:11 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereДопустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз. Как можно это сделать? Если есть ещё более быстрый способ -- ещё лучше. я знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ? на самом деле все равно, как читать. лишь бы не посимвольно. если читать строку gets() или аналогом, то будет вполне хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:24 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereИ ещё вопрос: почему файл с Код: plaintext 1. числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? во первых, они таки разделены, переводами строк (1 или2символов) во вторых, числа наверняка записаны как строки, поэтому надо считать не как size of int , а порядок числа, умножить на size of char. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:28 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
MasterZivна самом деле все равно, как читать. лишь бы не посимвольно. если читать строку gets() или аналогом, то будет вполне хорошо. лишь бы не посимвольно -- это лишь бы не как в buf3()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:34 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereНаписал так, работает быстрее. Только как понять, что достигнут конец файла, ведь так можно до бесконечности цикл с "i" проходить? Читай хэлп на std::istream::read() И проверка у тебя не очень корректная. Что будет если встретятся последовательности "12-345", "12x345" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 07:04 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39115926&tid=2018695]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 285ms |
| total: | 445ms |

| 0 / 0 |
