Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2016-12-01 13:55:24 ЛС | профиль | цитата
У меня нет слов. Я тут глянул на функции кодирования/декодирования Base64 - как можно строку размером в 500 кб обрабатывать 40 секунд на среднем компьютере (90 с. на слабом, 25 с. на мощном)?

В этом архиве - переработанные функции Base64 и демонстрация быстродействия. Тест выполняется до 3-х минут.

Разница в скорости - не в десятки процентов, не в пару раз, а в 60 ТЫСЯЧ раз! Так писать код надо уметь.
Там же есть функция Base64_CodeNew - пример как нужно было реализовать эту функцию изначально.

Результаты тестов на слабом компьютере:

Оригинальная Base64_Code: 
- объём задачи: 0.5 Мб
- время выполнения: 91.313 с
- примерная скорость: 0.00547 МБ/с
Усовершенствованная Base64_Code:
- объём задачи: 2000 Мб
- время выполнения: 25.219 с
- примерная скорость: 79.305 МБ/с
Новая StrToBase64:
- объём задачи: 2000 Мб
- время выполнения: 5.734 с
- примерная скорость: 348.796 МБ/с
Новая Base64ToStr:
- объём задачи: 2000 Мб
- время выполнения: 7.453 с
- примерная скорость: 268.348 МБ/с

Если никаких возражений не будет - там же в архиве поправленный компонент Charset:
- модифицированы функции преобразования строк
- добавлены функции работы с произвольным буфером, а не только строками
- добавлено событие onError (скрытая) - при декодировании Base64 выдаёт ошибку, если во входной строке обнаружены недопустимые символы или неправильная длина строки. В старом компоненте такие строки обрабатывались по-тихому, что не позволяло автору схемы быстро понять, что он подал на компонент неправильные данные. Можно и в остальные методы добавить контроль ошибок.
карма: 26

0
Редактировалось 6 раз(а), последний 2016-12-01 15:54:16