|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Проблема с нехваткой памяти при работе программы
Регистрация: 01.07.2010
Сообщений: 521
|
||
Просмотров: 3580
|
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,171
|
все 2 лимона значений постоянно хранятся в памяти и все требуются для вычислений?
Или для вычислений нужны только несколько текущих значений, а результаты последовательно пишутся куда-то в файл, насчитывающий 2 лимона записей? Короче, код в студию (gc) - не панацея ![]() |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Zaghim, к тому что сказал Хмурый + эти функции, хотя может и kp+ прав и можно оптимизировать сам код:
(alloc <размер>) - устанавливает размер сегмента для последующего вызова функции expand (expand <количество>) - отводит в памяти дополнительное количество сегментов для работы LISP (gc) - выполняет сборку мусора (освобождает память от неиспользуемых данных) Из книги AutoLisp и Visual Lisp в среде AutoCAD Когда работают большие приложения, то может возникнуть необходимость высвобождения памяти в куче (heap), поскольку не хватает места для размещения очередной порции временных данных. В такой ситуации операция сборки мусора может принести пользу |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Что удалено?
В программе ищутся линии, которые лежат в одном из 4 направлений от точки. Ищутся разными способами в зависимости от того, нашлась ли линия, например, сверху от точки или нет. Затем беру свойства этой линии выполняю мат. расчет, формирую строку и записываю в файл. |
|||
![]() |
|
||||
Причина утечки памяти в твоей программе связана с тем, что ты создаешь и удаляешь примитивы - при этом AutoCAD не освобождает память. Так уж он устроен. Освобождение памяти происходит при сохранении и закрытиии чертежа. Так что спасение только в кардинальном изменении алгоритма (о чем тебе уже неоднократно писали) или переходе на платформу x64 с достаточной памятью. Думаю, что изменить алгоритм проще. IMHO.
Последний раз редактировалось Александр Ривилис, 23.09.2010 в 15:27. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
(gc) и сейчас помогает, но совсем немного. Чуть-чуть. В рассматриваемом случае всё из-за алгоритма. Разумеется, не надо ничего сразу стираемого рисовать. Но и формировать в памяти неограниченный файл не стоит. Вместо оперативной памяти начнет использоваться подкачка, резко упадет скорость. Потом возникнет проблема с записью файла. Наверняка найдется другое решение. Например, запись-чтение в маленький файл. |
|||
![]() |
|
||||
Вы представляете себе, что это за объём - 300 Мб текста? 1 Мб текста примерно равен 400 страницам печатного текста.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 23.09.2010 в 21:51. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
![]() Вообще-то задачи подобного вида решались даже в Автокад-10 под DOS с мизерной доступной памятью. А еще раньше - на "советских" ЭВМ МИР-1 всего-то с 48 Кб ОЗУ (вчера на хабре добрым словом помянули). Все за счет правильных алгоритмов... |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема нехватки памяти при загрузке рисунков | ADF | AutoCAD | 36 | 18.04.2009 22:34 |
небольшая проблема при работе | мозг | Разное | 1 | 02.09.2007 18:20 |
Как делать левак(гребешки) на работе?? | chd333 | Разное | 29 | 31.07.2007 09:45 |
Проблема при работе с блоками. | _Дмитрий_ | Программирование | 6 | 27.09.2004 06:22 |
Проблема при работе с лейаутами | zebs | AutoCAD | 2 | 16.09.2004 13:56 |