При запуске Lisp идет утечка памяти
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > При запуске Lisp идет утечка памяти

При запуске Lisp идет утечка памяти

Ответ
Поиск в этой теме
Непрочитано 24.07.2007, 11:33 #1
При запуске Lisp идет утечка памяти
Name
 
Владимир
Регистрация: 18.06.2007
Сообщений: 7

Пишу маленькую прогу на lisp, читает строки из файла и вставляет в табличку (примитив acad_table). Только работает достаточно долго, файл в 400 строк обрабатывает минуты 2-3. Это нормально?

И еще. При каждом запуске объем используемой памяти возрастает на 30-40 мегабайт. Используемым переменным уже всем в конце в nil присваиваю, толку - ноль. Куда хоть копать?
Просмотров: 2041
 
Непрочитано 24.07.2007, 12:15 Re: При запуске Lisp идет утечка памяти
#2
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Name
Пишу маленькую прогу на lisp, читает строки из файла и вставляет в табличку (примитив acad_table). Только работает достаточно долго, файл в 400 строк обрабатывает минуты 2-3. Это нормально?
Не исключено, что с кодом всё нормально - АКАД очень медленно обрабатывает таблицы.

Цитата:
Сообщение от Name
И еще. При каждом запуске объем используемой памяти возрастает на 30-40 мегабайт. Используемым переменным уже всем в конце в nil присваиваю, толку - ноль. Куда хоть копать?
Код надо видеть.
Alaspher вне форума  
 
Непрочитано 24.07.2007, 12:15
#3
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Суть в том что при каждом изменении в
таблице, в данном случае при обращении
к любой ячейке, АвтоКАД перерисовывает эту
таблицу заново и образ этой таблице сохраняет
в специальном объекте scetch (черновик) и в течение
всей прграммы этот процесс идет непрерывно
В последних версиях облегчает жизнь и у величивает
скорость такая конструкция:

В начале заполнения таблицы, чтобы не перерисовывался
черновик таблицы:
Код:
[Выделить все]
(if (> (atof (getvar "acadver")) 16.1)
(vla-put-regeneratetablesuppressed vla_table :vlax-true)
)
А после завершения работы с таблицей
Код:
[Выделить все]
    
(if (> (atof (getvar "acadver")) 16.1)
(vla-put-regeneratetablesuppressed vla_table :vlax-false)
)
(этот метод аналогичен методу ScreenUpdating для Excel)

Еще нужно удалять ссылки на объекты, т.е. отключать их
от базы данных рисунка

Код:
[Выделить все]
(vlax-release-object mytable)
(setq mytable nil)
И самом конце может не помешать уборка мусора:
Код:
дважды не помешает

Теперь посмотри насколько будет быстрее

~'J'~
fixo вне форума  
 
Непрочитано 24.07.2007, 12:46
#4
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Fatty
Код:
[Выделить все]
(if (> (atof (getvar "acadver")) 16.1)
(vla-put-regeneratetablesuppressed vla_table :vlax-true)
)
Очень полезная конструкция! На маленькой таблице разницу не особо заметно, но сделал тестовую добавку 500 записей - в разы. Гуд! Не знал.
Alaspher вне форума  
 
Автор темы   Непрочитано 24.07.2007, 14:08
#5
Name


 
Регистрация: 18.06.2007
Владимир
Сообщений: 7


Большое спасибо, все работает, процесс память потребляет уже в разы медленней.

Еще раз большое спасибо.
Name вне форума  
 
Непрочитано 24.07.2007, 14:34
#6
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Alaspher
Цитата:
Сообщение от Fatty
Код:
[Выделить все]
(if (> (atof (getvar "acadver")) 16.1)
(vla-put-regeneratetablesuppressed vla_table :vlax-true)
)
Очень полезная конструкция! На маленькой таблице разницу не особо заметно, но сделал тестовую добавку 500 записей - в разы. Гуд! Не знал.
Между прочим VK сделал программку для
Entmake table
Еще в разы быстрей
Попробуй поискать, я у себя не нашел

~'J'~
fixo вне форума  
 
Непрочитано 24.07.2007, 14:36
#7
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Name
Большое спасибо, все работает, процесс память потребляет уже в разы медленней.

Еще раз большое спасибо.
Можно еще попробовать заполнение
ячеек тоже как-то через локальную функцию,
думаю еще чуток сэкономит время

~'J'~
fixo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > При запуске Lisp идет утечка памяти