Всем привет! Стояла задача минимизировать время выполнения кода. Делюсь решением, которое получилось на основе , которые я использовал. По моим скромным знаниям и тестированию другие пути оказались не столь эффективны. В итоге в массиве из 250 тыс. ячеек и выделение 62 тыс. ячеек расположенных в случайном порядке занимает порядка 60-70 секунд.
Решения:
1. Объединение через Range() до 254 знаков
2. Запись адресов без $ - (A1)
3. Минимальное использование Union, для этого создается буферный массив для заполнения Range(), в размере 29 блоков (+текущий =максимально для Union), увеличение быстродействия до 2х раз.
4. Не создавать каждый раз новую строку, а использовать одну (предыдущую строку) как символьный массив, изменения в котором можно выполнять копированием фрагмента памяти с помощью Mid$(StrBuf, Ptr) = StrNew. Mid$() вместо Mid(), потому как Mid$() быстрее.
5. Поиск не по ячейкам, а по массиву (загруженному из range), для этих же целей Set a2.
6. Отключение экрана, событий и автопересчета
7. Открытый для меня новый факт: при переборе столбцы-строки, быстрее чем строки-столбцы, если структура данных вертикальная - от 20 до 70%
Где можно ещё полернуть? Возможно есть другие оригинальные решения?
Ещё раз повторюсь, основная идея от ZVI, за что ему огромное человеческое спасибо!
Решения:
1. Объединение через Range() до 254 знаков
2. Запись адресов без $ - (A1)
3. Минимальное использование Union, для этого создается буферный массив для заполнения Range(), в размере 29 блоков (+текущий =максимально для Union), увеличение быстродействия до 2х раз.
4. Не создавать каждый раз новую строку, а использовать одну (предыдущую строку) как символьный массив, изменения в котором можно выполнять копированием фрагмента памяти с помощью Mid$(StrBuf, Ptr) = StrNew. Mid$() вместо Mid(), потому как Mid$() быстрее.
5. Поиск не по ячейкам, а по массиву (загруженному из range), для этих же целей Set a2.
6. Отключение экрана, событий и автопересчета
7. Открытый для меня новый факт: при переборе столбцы-строки, быстрее чем строки-столбцы, если структура данных вертикальная - от 20 до 70%
Где можно ещё полернуть? Возможно есть другие оригинальные решения?
Ещё раз повторюсь, основная идея от ZVI, за что ему огромное человеческое спасибо!
Изменено: - 04.03.2016 15:51:53
«Бритва Оккама» или «Принцип Калашникова»?