[CDR X5-X8] Почему при повторении макроса время выполнения увеличивается?

  • Автор темы Автор темы flamber
  • Дата начала Дата начала

flamber

Участник
Топикстартер
Сообщения
15
Реакции
1
Привет всем! Есть программа очень большая и затейливая. Столкнулся с проблемой увеличения времени работы при последующих её выполнениях. Т.е. После перезагрузки Corel она выполняется 25 сек. Удаляю что нарисовала и снова запускаю. Выполняется уже 35сек и так по нарастающей. Коннекты к безе данных закрываю, массивы обнуляю. Вопрос, что на это может влиять?
 

Не по теме:
Ванги в чате есть?'hmmm'
 
  • Спасибо
Реакции: flamber
Да конечно! :)
 

Вложения

Уже лучше :)

Не по теме:

Если верно понял там куча действий. Может попробовать очищать откаты?

 
  • Спасибо
Реакции: flamber

Не по теме:
Чем-то напомнило, как во времена первых персоналок при поломке компьютера брали со стола монитор и везли в ремонт.

Пока же могу посоветовать вместо постоянного деления чисел на 25.4 воткнуть в начало ActiveDocument.Unit = cdrMillimeter. С тормозами не поможет, но будет красивее.

 
Последнее редактирование:
  • Спасибо
Реакции: flamber
Привет всем! Есть программа очень большая и затейливая. Столкнулся с проблемой увеличения времени работы при последующих её выполнениях. Т.е. После перезагрузки Corel она выполняется 25 сек. Удаляю что нарисовала и снова запускаю. Выполняется уже 35сек и так по нарастающей. Коннекты к безе данных закрываю, массивы обнуляю. Вопрос, что на это может влиять?
Программу не смотрел, но осуждаю, хочу сказать, что VBA - крайне сырой и глючный инструмент для программирования серьезного софта, гораздо менее надежный, чем даже javascript, в плане оптимизации очистки мусора и дефрагментации. Особенно в кореловской реализации. Поэтому следует избегать итерационных операций рисования-удаления обьектов, не загружать очередь Undo и отключать промежуточные прорисовки. В идеале - если программа большая и затейливая, вообще отказаться от кореловского движка операций с обьектами, перенести их в натив, отрисовав только конечный результат.
 
  • Спасибо
Реакции: flamber и Chiga

Не по теме:
Чем-то напомнило, как во времена первых персоналок при поломке компьютера брали со стола монитор и везли в ремонт.

Пока же могу посоветовать вместо постоянного деления чисел на 25.4 воткнуть в начало ActiveDocument.Unit = cdrMillimeter. С тормозами не поможет, но будет красивее.


Спасибо! Воткну обязательно!
 
Программу не смотрел, но осуждаю, хочу сказать, что VBA - крайне сырой и глючный инструмент для программирования серьезного софта, гораздо менее надежный, чем даже javascript, в плане оптимизации очистки мусора и дефрагментации. Особенно в кореловской реализации. Поэтому следует избегать итерационных операций рисования-удаления обьектов, не загружать очередь Undo и отключать промежуточные прорисовки. В идеале - если программа большая и затейливая, вообще отказаться от кореловского движка операций с обьектами, перенести их в натив, отрисовав только конечный результат.
То что в файле это маленький кусочек. Переписывать все времени просто нет. Спасибо за совет!
 
То что в файле это маленький кусочек. Переписывать все времени просто нет. Спасибо за совет!
Тогда смириться. У меня, помнится, тоже когда-то был макрос, прямо скажем, вроде, не шибко и сложный, последовательность действий строго линейная, да вот, хватало его работы ровно на один раз - после отработки надо было перезагрузить корел, иначе повторный запуск чудить начинал изрядно, причем, совершенно непредсказуемо. VBA - зло.
 
  • Спасибо
Реакции: flamber
Ураа!!! Нашел тормоз!!!

Было:
Set eff1 = s.CreateContour(Direction, dd, 1)
Set B = eff1.Separate
B.Item(1).Cut
Set A = Lay.Paste

Переделал:
Set eff1 = s.CreateContour(Direction, dd, 1)
Set B = eff1.Separate
Set A = B.Item(1).Duplicate
B.Item(1).Delete
A .MoveToLayer Lay

Скорость увеличилась раз в 200 и нет эффекта накопления задержки!
 
Последнее редактирование:
Да, в Кореле операции с буфером обмена крайне неспешно рабатают
 
  • Спасибо
Реакции: flamber