www.map-info.ru :: Просмотр темы - Работа с объектами
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Raiser
Гость





СообщениеДобавлено: Вт Апр 11, 2006 2:59 pm    Заголовок сообщения: Работа с объектами Добавить ответ со ссылкой на данный текст

Написал программу, которая делает много операций над объектом, т.е. создает два полигона, относительно имеющейся в таблице полилинии (слева и справа), для всех объектов в данной таблице. При запуске программы MapInfo в памяти занимает около 18 Mb. В ходе выполнения размер постоянно увеличивается и программа выполняется все медленее. Есть предположение, что переменные типа Object остаются в памяти. Как этого избежать?
Вернуться к началу
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Апр 11, 2006 3:00 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Скорее всего ошибка как обычно в 13-ой строке! :)
Программу-то на чем написал? Кусок кода можешь привести? А вообще можешь найти утечку так - выкидывай из программы часть кода, проверяй - утекает, еще выкидавай, перестало утекать - значит в этом месте, добавляешь код обратно, выкидываешь часть его и т.д. Типа методом половинного деления, так ты найдешь место которое выбирает память. Ну а дальше или сам поймешь что там делать или сюда обратишься.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Raiser
Гость





СообщениеДобавлено: Вт Апр 11, 2006 3:01 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Программу писал на MapBasic'е. Программу перелапатил от и до, но так и не нашел ошибку. Возможно объем памяти растет из-за следующих строк:
NObj=Combine(LObj, CreateLine(ObjectNodeX(LObj, 1, 1), ObjectNodeY(LObj, 1, 1),
ObjectNodeX(TObj, 1, ObjectInfo(TObj, OBJ_INFO_NPNTS)), ObjectNodeY(TObj, 1, ObjectInfo(TObj, OBJ_INFO_NPNTS))))
NObj=Combine(NObj, TObj)
NObj=Combine(NObj, CreateLine(ObjectNodeX(LObj, 1, ObjectInfo(LObj, OBJ_INFO_NPNTS)), ObjectNodeY(LObj, 1, ObjectInfo(LObj, OBJ_INFO_NPNTS)),
ObjectNodeX(TObj, 1, 1), ObjectNodeY(TObj, 1, 1)))
NObj=ConvertToRegion(NObj)
LObj=NObj
Вернуться к началу
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Апр 11, 2006 3:02 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1. Попробуй создание объектов типа CreateLine(ObjectNodeX(LObj, 1, 1) внутрях процедуры Combine вынести в присвоение отдельным переменным. Т.е.:
ob1=CreateLine(ObjectNodeX(LObj, 1, 1)
NObj=Combine(LObj, ob1, ObjectNodeY(LObj, 1, 1),
ObjectNodeX(TObj, 1, ObjectInfo(TObj, OBJ_INFO_NPNTS)), ObjectNodeY(TObj, 1, ObjectInfo(TObj, OBJ_INFO_NPNTS))))
и т.д.

2. А потом эти объекты я понимаю вставляются в таблицу через Insert? И много таких вставок? Тысячи, десятки тысяч, более? Commit когда делаешь? После вставки всех объетов? Или почаще по ходу делай commit, или рассмотри возможность прямой вставки в таблицу, используя Set Table tablename FastEdit On
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru