[РЕШЕНО] Как повысить производительность макроса

Автор sn_007, 23 декабря 2015, 21:47

0 Пользователи и 1 гость просматривают эту тему.

sn_007

Коллеги, доброго времени суток!
Ещё нужна небольшая помощь.

Я написал макрос под OOo 3.0 на Бейсике.
Он отлично работает, но довольно медленно.

Суть в том, что примерно из 2500 ячеек вызывается моя макрос-функция, возвращающая число в ячейку.
Каждый такой вызов возвращает найденное в другом листе число из диапазона примерно 20000 ячеек.
В общем-то объём вполне разумный, ничего сверхъестественного - но на эту работу уходит суммарно более 3 секунд.
Можно ли что-то придумать, чтобы в несколько раз ускорить этот макрос.

Код даже присылать нет смысла: там в каждом вызове банально перелопачивается матрица из 20000 ячеек при помощи метода GetCellByPosition().
Может быть проблема именно в нём - нужно использовать какой-то более эффективный подход?

Заранее признателен, если кто-нибудь посоветует, как это улучшить!

rami

Цитата: sn_007 от 23 декабря 2015, 19:47Суть в том, что примерно из 2500 ячеек вызывается моя макрос-функция, возвращающая число в ячейку.
Каждый такой вызов возвращает найденное в другом листе число из диапазона примерно 20000 ячеек.
В общем-то объём вполне разумный, ничего сверхъестественного - но на эту работу уходит суммарно более 3 секунд.
Три секунды на 20000 ячеек — это не так уж и медленно.
Цитата: sn_007 от 23 декабря 2015, 19:47Код даже присылать нет смысла: там в каждом вызове банально перелопачивается матрица из 20000 ячеек при помощи метода GetCellByPosition().
Может быть проблема именно в нём - нужно использовать какой-то более эффективный подход?
Извлечение данных массивом и обработка массива быстрее чем поштучная обработка ячеек. Но это в общем, конкретно нужно смотреть на задачу (исходные данные и макрос)

sn_007

Спасибо за быстрый отклик!

Я прикреплю файл с макросом.
Посмотрите, пожалуйста, что там можно принципиально улучшить...

rami

Если говорить только о макросе, то в нём есть кое-что лишнее, например все строки кода trener_tasks = trener_tasks + 1 можно смело убрать слегка изменив концовку макроса, по-мелочам можно ещё кое-что изменить, но макрос в принципе не тормозит, тормоза в не оптимальном построении таблиц.

Я бы сократил объём планирования — не на год, а на два - три месяца (если можно), а так же предотвратил бы вычисления для пустых строк (без имён)

sn_007

Спасибо большое! Отлично!
Хорошие мысли, обязательно ими воспользуюсь.

А как отметить эту тему как решённую?

Ещё раз спасибо, и успехов Вам!