Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 29.10.2016
Сообщений: 16

Уборка мусора после вычислений в HomeLisp

30.10.2016, 11:05. Показов 1462. Ответов 8

Студворк — интернет-сервис помощи студентам
После запуска программы рисования случайных точек для параметра >=20000 сборка мусора занимает заметное время. Что в программе приводит к такому расходу памяти?

Можно ли как-нибудь её переделать так, чтобы она меньше мусорила?

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun test(c)
    (prog (i w h x y)
        (setq w 400)
        (setq h 400)
        (grwCreate 's w h "Случайные точки" _WHITE)
        (grwShow 's)
        (dotimes (i c t)
            (pshow (* 100. (/ i c)) "Рисую...")
            (setq x (RND w))
            (setq y (RND h))
            (grwPset 's x y _BLACK)
        )
        (phide)
        (sleep* 5000)
        (grwHide 's)
        (grwDestroy 's)
    )
)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2016, 11:05
Ответы с готовыми решениями:

Уборка мусора из double
Подскажите, как убрать мусор из числа типа double. Например число 13 на самом деле не 13, а 13.00000001.

Вывод мусора после отработки функции
#include <iostream> #include <conio.h> void Binary(char *&,int); using namespace std; int main() { int number; char * str =...

ПОСЛЕ МЭЙЛРУ МУСОРА МАШИНА УМЕРЛА
Добрый вечер. Очень печальная ситуация в виду отсутствия финансов, ибо зарабатывал я их как рас на компьютере. После установки...

8
2 / 2 / 0
Регистрация: 29.10.2016
Сообщений: 16
30.10.2016, 11:34  [ТС]
Файл с программой
Вложения
Тип файла: zip Test.zip (374 байт, 1 просмотров)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
30.10.2016, 13:26
Как ни странно, главный вклад даёт pshow. Рекомендую вызывать pshow не на каждом витке внутреннего цикла, а на каждом тысячном (или вообще отказаться от ее вызова):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun test(c)
    (prog (i w h x y)
        (setq w 400)
        (setq h 400)
        (grwCreate 's w h "Случайные точки" _WHITE)
        (grwShow 's)
        (dotimes (i c t)
            (when (zerop (% i 1000))(pshow (* 100. (/ i c)) "Рисую..."))
            (setq x (RND w))
            (setq y (RND h))
            (grwPset 's x y _BLACK)
        )
        (phide)
        (sleep* 5000)
        (grwHide 's)
        (grwDestroy 's)))
Создается примерно вдвое меньше "мусорных" атомов - соответственно и заметно сокращается время уборки мусора.
1
2 / 2 / 0
Регистрация: 29.10.2016
Сообщений: 16
30.10.2016, 15:51  [ТС]
Огорчает то, что даже пустой цикл использует столько же памяти, сколько и вариант БЕЗ pshow. Например, при c=20000 утилизируется 19986 атомов.

Lisp
1
2
3
4
5
6
7
(defun test2(c)
    (prog (i)
        (dotimes (i c t)
            ()
        )
    )
)
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.10.2016, 15:55
rombva, автор HomeLisp конечно лучше подскажет, но я бы на вашем месте ради любопытства попробовал вместо подобных макросов реализовать цикл через хвостовую рекурсию - она может быть оптимизирована в данной реализации языка.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
30.10.2016, 16:05
rombva, если сделать exe-файл, то сборка мусора становится незаметной.
Вложения
Тип файла: zip t.zip (363.3 Кб, 1 просмотров)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
30.10.2016, 16:06
_Ivana, увы. Этого (оптимизации хвостовой рекурсии) пока нет.
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
31.10.2016, 12:49
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

rombva, попробуйте периодически вызывать функцию "gc" (эта функция запускает сборку мусора):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun test(c)
    (prog (i w h x y)
        (setq w 400)
        (setq h 400)
        (grwCreate 's w h "Случайные точки" _WHITE)
        (grwShow 's)
        (dotimes (i c t)
            (when (zerop (% i 1000))(pshow (* 100. (/ i c)) "Рисую...") (gc))
            (setq x (RND w))
            (setq y (RND h))
            (grwPset 's x y _BLACK)
        )
        (phide)
        (sleep* 5000)
        (grwHide 's)
        (grwDestroy 's)))
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
31.10.2016, 13:09
Кстати, да можно периодически (но не слишком часто) вызывать gc явно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2016, 13:09
Помогаю со студенческими работами здесь

Как избавиться от мусора на экране, который остался после анимации?
Сделал анимацию появления и удаления картинок внутри ScrollView. Но после них остается мусор, причем за пределами ScrollView. Подскажите,...

Уборка
Мусор, состоящий из маленьких прямолинейных палочек, был разбросан по картинке, которая была просто нарисована, и краска на ней еще не...

Уборка лишнего
Подскажите как убрать то что отметил на картинке красным

После установки сомнительной программы куча мусора в виде известного браузера и иже с ним
Открывает рекламу, меняет поисковые системы и прочие пакости! Помогите, пожалуйста! Встала вся работа :((

как после вычислений,расчёты занести в таблицу
Не подскажете как после вычислений,расчёты занести в таблицу!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru