|
|
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Bellic, Не, ну я здесь как бы самый главный специалист по оптимизациям и тексту А ты меня игнорируешь. Мне обидно Что до компонента - это открытие библиотеки на гитхабе. Ссылку я тебе дал, а если что - достаточно легко гуглится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 18:56 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
BellicА уже после этого - буду думать что еще можно оптимизировать! Не слушай прематурщиков. На избавлении от конкатенации ты много не сэкономишь. В современных дельфях очень хороший менеджер памяти (FastMM), которому многократные запросы на ресайз не страшны. Вот на избавлении от множества дисковых операций сэкономить можно, да. Кроме этого, у тебя есть ещё один косяк, который может изрядно тормозить. Замени свою AnsiString на UnicodeString или просто на String, и посмотри, что будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 19:00 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНе, ну я здесь как бы самый главный специалист по оптимизациям и тексту ...самопровозглашённый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 19:02 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey...самопровозглашённый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 19:06 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, померял на xe6 - разница в 10 раз, конкатенация против заполнения. хотя, конечно, на современных процессорах возможно и незаметно особо будет на небольших наборах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 19:56 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
makhaonпомерял на xe6 - разница в 10 раз Ты померял конкатенацию в вакуме. Я тоже померял. Взял 10 мегабайт, и конкатенацией, побайтово, присовокупил к строке (s := s + IntToHex(b, 2)). Заняло это действо... 500msec. Аж целых пол-секунды. У топикстартера задача длится больше минуты. Ну и какая ему радость, от того, что усложнением кода удастся уменьшить 500msec до 50? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 20:11 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, понятно, что основные тормоза там на дисковых операциях. однако и это место можно вполне улучшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 20:17 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
makhaonпонятно, что основные тормоза там на дисковых операциях Вот тоже не факт. Дисковый кеш тоже не просто так существует. makhaonоднако и это место можно вполне улучшить. Нечего там экономить. У него больше потерь на конвертировании UnicodeString <> AnsiString происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 20:31 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, побайтное чтение - тоже не сахар. сложно сказать, что тормозит больше. есть куда оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 21:27 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Конкатенация это не ресайз Здесь вообще кроме дисковых операций, работы с памятью и конвертации - ничего нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 21:39 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
makhaonпобайтное чтение - тоже не сахар. И именно поэтому экономить на конкатенации в данном случае - прематурщина. SOFT FOR YOUКонкатенация это не ресайз Многократный запрос на ресайз это то, чем отличается конкатенация в цикле от варианта с предварительным резервированием. SOFT FOR YOUЗдесь вообще кроме дисковых операций, работы с памятью и конвертации - ничего нет Ты вообще-то говорил, что тут строки постоянно перевыделяются. А они таки нет. Вот то что они постоянно конвертируются, это таки да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 22:35 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Если я ничего не путаю То в данном коде выделяется 2 новые строки Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 22:46 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, На первой итерации цикла. Потом одна строка (т.е. память под неё) постепенно ресайзится, а вторая остаётся неизменной до конца цикла (т.к. многие функции возращающие строки не инициализируют результат, а просто изменяют размер. Ну а если размер постоянный...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2017, 22:51 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
В общем - еще раз провел "ревизию" алгоритма, убрав "Seek" и прочее в своей Полной программе... Результат, которого мне добиться на сегодняшний день - 43,7 секунды на двух файлах точного размера 9 967 616 байт. Замер производился на Delphi 10.2 ( DX ) в режиме Debug (В режиме Release видимо будет чуток побыстрее!?) Код пока не буду приводить - если кто захочет, покажу чуть позже Большие задержки вносят примерно такие операторы, как: - FOriginal.Position - Application.ProcessMessages ; - возможно SStroka := SStroka + AnsiChar(ISimvol) ; А сейчас мне хотелось бы предложить провести некоторый тест части кода - это самый первый цикл поиска Нулевых байт в обоих файлах. Полученный результат - это будет Минимальное время, к которому нужно стремиться при используемом способе побайтного чтения! Исходя из полученного времени выполнения можно будет судить о времени выполнения ПОЛНОЙ программы. Сейчас я приведу код, и вы я думаю поймете о чем я! Данный вариант использует TFileStream: Код: 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. Для тестирования Оба файла заполнялись байтами " FF " Время выполнения - 36,29 секунды! (Теоретически - используя TFileStream ускорить не получится!) Используя TBufferedFileStream в этом же коде - получаем 43,68 секунд. P . S . Время выполнения в пределах одной минуты Полной программы - думаю вполне нормальным, но если кому интересно - можно продолжить и поискать другие варианты, например предложенный SOFT FOR YOU - вариант прочесть оба файла в Memory и уже от туда производить чтение для сравнения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 01:09 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Bellic, Читать из памяти предложил не я изначально Я предложил использовать CachedBuffers Ни первое, ни второе ты не сделал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 09:15 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUНи первое, ни второе ты не сделал Ну любит человек кактусы, не мешай ему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 10:25 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUBellic, Читать из памяти предложил не я изначально Я предложил использовать CachedBuffers Ни первое, ни второе ты не сделал Ай-яй-яЙ!!!!... SOFT FOR YOU , подскажи плизз - как установить сие чудо ( CachedBuffers )? А то автор ни слова о подключении не написал! Библиотеку скачал, но в папке sources - два файла ( CachedBuffers.pas и CachedStreams.pas )! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 10:43 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Bellic, Подключаешь в uses CachedBuffers и используешь А ещё мне кажется, в твоём случае лучше будет такой подход: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 11:51 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
... скопировал CachedBuffers.pas и CachedStreams.pas в каталог с Проектом и прописал: Код: pascal 1. Чем и как можно пользоваться в каждом из модулей? SOFT FOR YOU , я так понял - это Ваша разработка? я понял так, что написание Мануала в ней не намечалось!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 11:56 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Reader.Size - не поддерживается !!! (Пытался применить по аналогии с TFileStream-ом) ... P.S. Напишите пожалуйста подробный мануал по Всем внутренностям Обоих модулей!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 12:08 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Reader.Seek - аналогично не поддерживается!!!!!!...(((( Ни чего личного!!! Но Юзер не обязан копаться в исходниках в поиске правильного Синтаксиса и заложенного Функционала! Имхо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 12:18 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
Bellic, Я же выше написал, как юзать :) Вместо Size есть Limit. Вместо Seek есть DirectRead. Если хочешь прям вообще Seek - то придётся напрячься. Справка есть в README.md на странице проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 12:35 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUBellic, Я же выше написал, как юзать :) Вместо Size есть Limit. Вместо Seek есть DirectRead. Если хочешь прям вообще Seek - то придётся напрячься. Справка есть в README.md на странице проекта. Именно Seek - не обязательно!..)) README.md нашел, спасибо! А на Великом и Могучем, на родненьком (ну по крайней мере, мне!) русском языке - аналог имеется?...) Уже заюзал..))) На основе тестовой процедуры, выше, получился следующий код: Код: 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. Афигеть!!! Класс!!!..))) P.S. SOFT FOR YOU , мне результат очень понравился, хотелось бы изучить более подробней Обе библиотеки, я конечно же прибегну к помощи Google-Переводчика, но Английский язык иногда бывает несколько суховат и не передает некоторые нюансы русскоязычного варианта! Не правда ли?..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 12:50 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
BellicВремя выполнения на тех же тестовых файлах - 2,5 секунды !!!! Афигеть!!! Класс!!!..)))Если б ты еще вычитывал и сравнивал не побайтно, а там, по 16к, боюсь представить даже, как бы ты на такую скорость отреагировал. И без кэшедбуферз. Но, может, так надо, я не вдавался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 13:14 |
|
||
|
Оптимизация побайтового чтения и сравнения двух бинарных файлов
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, вот за это BellicВремя выполнения на тех же тестовых файлах - 2,5 секунды !!!! Афигеть!!! Класс!!!..))) ты ему ящик пива шампанского (в преддверии НГ) должен. За рекламу. Если конечно, вы оба двое - разные исторические лица :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2017, 13:15 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39574053&tid=2041399]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 464ms |

| 0 / 0 |
