Загрузка...

Средства управления временем и памятью при работе в среде AutoLisp


Рекомендации по работе с памятью:
1) Общее:
— Можно сокращать количество различных переменных за счет повторного использования старых переменных для других целей. При этом, однако, могут возникнуть трудности с пониманием описания пр-мы. Необходимо следить за тем, чтобы при использовании такого приема не было попытки одновременного использования старого и нового значения переменной.
(SETQ A “First name: 15”)
. . .
(SETQ A (ENTSEL “select entity: ”))
. . .
(PRINC A) ?NIL
результат будет связан с тем, что после выполнения 2-ой функции SETQ A строковое значение А теряется.
— Если можно обойтись без переменной, то эту возможность нужно использовать.
(SETQ A (ENTSEL))
(SETQ B (CAR A))
(SETQ C (ENTGET B))
(SETQ E (ASSOC 0 C))
(SETQ D (CDR E))

(SETQ E (CDR (ASSOC 0 (ENTGET (CAR (ENTSEL)))))).

2) Специальные рекомендации:
— Последовательную работу (цикл) с различными примитивами можно организовать двумя способами:
1.Записать имена примитивов в список.
2.Сформировать набор из этих переменных (предпочтительнее).
-Следует ограничивать длину имени переменной 6 символами (занимает меньше места в памяти)
-Применение специальной функции AutoLisp позволяющей изменить размер и способ выделения памяти для различн. программных продуктов, так в результате выполнения функции VMON все последующие операции, описанные с помощью функции DEFUN, не будут постоянно находиться в памяти: при обращении к ним они будут загружаться, а затем выгружаться. Это может привести к увеличению времени работы, но позволит создавать более сложные пр-мы.
-Более универсальным средством управления памятью является операция обращения имен функции переменных в NIL.
Использование HEAP и STACK в случае с DOS – верхний HEAP управляет областью памяти, которая хранит имена переменных и функций, а STACK управляет содержимым.
Для определения размера памяти используется переменная среды:
LISPHEAP ? LISPSTACK
??-?
SETQ LISPHEAP=20000
SETQ LISPSTACK =25000.

Рекомендации по сокращению времени работы:
-Необходимо сократить число действий, попадающих внутрь цикла.
-Если какая-либо последовательность действий повторяется более одного раза, надо ввести дополнительную переменную и записать в ней результат действия, а затем пользоваться этой переменной. Если результат какого-либо действия не зависит от того цикла, то это действие выходит за пределы цикла.
1.(WHILE (<X 100)
(SETQ Y (+ Y (SIN X))
Z(/ (SIN X) (SINA))
X (1+ X)
);end setq
); end while.
2.(SETQ SIN A (SIN A ))
(WHILE (<X 100)
(SETQ SIN X (SIN_X)
Y(+ Y SINX)
Z(/ SINX SINA)
A(1+X)
)
)
сокращение времени в 2 раза достигнуто за счет потери части памяти под 2-е переменные SINA и SINX.
-Если возможно, следует заменять последовательность команд системы AutoLisp одной командой. При выполнении простых построений лучше использовать комплексные (OFFSET, ARRAY) команды.
-Довольно много времени занимает регенерация чертежа, поэтому следует сокращать или избегать команд требующих регенерации.
-Значительное ускорение при циклическом выполнении программ можно получить путем отключения эха выполнения команд и отмены простановки маркеров. Для этого применяются функции:
CMDECHD – отключает режим эхо выдачи сообщений на экран.
BLIPMODE – режим простановки маркеров.
(SETQ “CMDECHD” 0)
(SETQ “BLIPMODE” 0).
-Иногда в процессе отладки программ приходится включать какие-либо текстовые (графические) поясняющие сигналы. Если программа отлажена, то эти сигналы следует убрать.

Загрузка...