Цитата |
---|
Андрей VG написал: Но показывать такое в примере я такого не буду |
Как отсортировать 5 миллионов строк?
28.06.2020 14:30:42
|
|
|
|
28.06.2020 14:37:40
Ека, господа, как у вас все медленно... 5 млн. строк это ниочем, вот если бы
Изменено:
«Бритва Оккама» или «Принцип Калашникова»?
|
|
|
|
28.06.2020 14:45:21
|
|||
|
|
28.06.2020 14:47:02
Здесь рабочий скрипт Рowershell. Если после последнего слеша вместо числа попадается слово, скрипт выдаёт предупреждение, но работу заканчивает. Может кому-то пригодиться.
Изменено: |
|||
|
|
28.06.2020 14:51:08
Увы, да. Основная проблема скорость чтения и вставки в Recordset - 30 секунд (просто прочитать строки в массив 4 секунды) /записи 19 секунд. Почти 49 секунд из 61 непроизводительное IO. Ну, и регулярки - они тоже особо быстрыми не были. Естественно, согласен, что привлечение Recordset тут лишнее - можно было бы и массивом записей озаботится и их через QuickSort упорядочивать. Но что делать с 23 секундами файловых операций, плюс регулярки?
Изменено: |
|||
|
|
28.06.2020 15:02:49
Андрей VG, Привет. Да основное время это чтение/запись, у меня также в
По данной теме можно удалить пару строк
«Бритва Оккама» или «Принцип Калашникова»?
|
|
|
|
28.06.2020 15:15:00
Андрей VG, спасибо
UPD: Вариант со скрина не выдерживает критики - Split строки, состоящей из 5 млн строк занимает 50 секунд Впрочем, логически это тоже было делать глупо…
Изменено:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|
|
|
28.06.2020 16:24:21
Jack Famous, Алексей, у вас также Scripting.TextStream раза в два медленнее работает, чем старые древние методы VBA по работе с файлом?
|
|
|
|
28.06.2020 16:30:16
Андрей VG, могу у себя протестировать, если есть тест)
«Бритва Оккама» или «Принцип Калашникова»?
|
|
|
|
28.06.2020 16:49:44
VBA Write: 5,988281 Scripting Write: 28,09375 VBA Read: 3,121094 Scripting Read: 7,730469 Excel 365 64bit, Windows 10, SSD |
|||
|
|
28.06.2020 17:11:48
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|||
|
|
28.06.2020 17:16:52
Дополним код
И получим Scripting ReadAll: 7,945313 Что с циклом, что без цикла - скорость у TextStream похоже не меняется |
|||||
|
|
28.06.2020 17:26:21
Я считаю, что это просто удобнее и
Ты показал и доказал (спасибо), что этот вариант тормознутый — согласен, что мне проще засунуть этот цикл в UDFку (если уж так хочется краткости), для чтения и записи
Изменено:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|||||
|
|
28.06.2020 17:45:41
Updated. Попробовал ADODB.Stream задействовать - вот где тормоза, так тормоза. Прибил через 5 минут ожидания. На всякий случай - вдруг я его как-то неправильно использую?
Изменено: |
|||||
|
|
28.06.2020 18:14:09
Внезапно… Вот за что я люблю программирование
Несмотря на то, что сама сортировка аж в 5 раз медленнее (10 сек против 2, хотя у меня использовался универсальный сортер и специальный под целые числа был бы быстрее), общее время выполнения аж ровно в 2 раза быстрее (44 секунды против 88) Выигрыш времени в основном на этапа обработки (почти в 5 раз)
Изменено:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|||||
|
|
28.06.2020 20:37:22
Изменено:
Владимир
|
|||
|
|
28.06.2020 20:42:17
|
|||
|
|
29.06.2020 00:16:33
Андрей VG, Андрей, вот мои результаты:
VBA Write: 13,71875 Scripting Write: 46,95313 VBA Read: 5,023438 Scripting Read: 13,23438
Без оптимизаций сортировка файла из сообщения21 - 15,5 сек. (сама сортировка 4,7 сек) Файл - пример прилагаю. Файл txt выкладывал на D:, измените в макросе на свой путь и готово.
«Бритва Оккама» или «Принцип Калашникова»?
|
|||||
|
|
29.06.2020 06:40:40
bedvit, ещё в 3 раза быстрее — ну тут я не сомневался
Антивирус взъерепенился, отправил на проверку и уже потом дал добро
Изменено:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|
|
|
29.06.2020 07:59:43
bedvit, большое спасибо, за реализацию. Только, приношу свои извинения, может не строки тогда сортировать, а индексы? Иначе, получается, пусть ваш ПК в два раза медленнее чем у Алексея. Тогда Recordset выполнил сортировку за 4 секунды, а у вас получилось 4,7 секунды.
|
|
|
|
29.06.2020 10:46:17
Добавлю еще вариант решения с использованием SQL. В примере исходный файл (file.txt) и результат (result.txt) находятся в папке D:\temp, там же создаем файл schema.ini со следующим содержимым:
Изменено: |
|||||
|
|
29.06.2020 10:47:22
Jack Famous, рад, что вирусов не нашлось) Хотя, если бы вирус нашелся, а я его не писал, значит появился ИИ. Это Нобелевка, эх...
Андрей, а так (комп помощнее, вчера домашний, сегодня рабочий)? Использовал параллельную сортировку Итого 4,4 сек
Изменено:
«Бритва Оккама» или «Принцип Калашникова»?
|
|
|
|
29.06.2020 10:51:24
DenSyo, время выполнения какое?
Изменено:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|||
|
|
29.06.2020 10:58:21
Изменено: |
|||
|
|
29.06.2020 11:10:19
|
|
|
|
29.06.2020 11:10:53
DenSyo, у меня (из #45) 44 сек - может можно как-то оптимизировать запрос для скорости?
я совсем не буб-бум в этом конечно, но вроде рекордсет для этого плох - типа запрос можно как-то по-другому отправить и будет быстрее
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)
|
|
|
|
29.06.2020 11:16:25
Добавил файл в сообщение 52, протестируйте на время - интересно.
«Бритва Оккама» или «Принцип Калашникова»?
|
|
|
|
29.06.2020 11:24:24
Изменено: |
|||||
|
|
29.06.2020 12:37:34
Выполнение: Read time: 12,90625 Sort time: 6,796875 Write time: 8 Full time: 27,70703 MCH, Михаил, большое спасибо, всё никак не освою, а тут такой повод разобрать наконец-то. |
|||||||
|
|
||||||