powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MEMORY LEAK
9 сообщений из 9, страница 1 из 1
MEMORY LEAK
    #33677973
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
передо мной стоит слеюующая задача:

отобразить дерево (TreeView)
каждому узлу необходимо сопоставить еще несколько атрибутов
я это сделал так -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
LOCAL oNode as Object, oParam as Custom
oNode = treeview.Nodes.Add(...)
oParam = createobject("Custom")
oParam.AddProperty("MyProp1", ...)
oParam.AddProperty("MyProp2", ...)
oParam.AddProperty("MyProp3", ...)
oNode.Tag = oParam
oParam = NULL
теперь я могу хранить три своих собственных свойства (MyProp1/2/3) в каждом узле дерева и ссылаться на них прямо так -
Код: plaintext
TreeView.Nodes(i).Tag.MyProp1
но вот проблема - я не могу их по-человечески удалить из памяти, когда дерево уничтожается или удаляется вершина
а фокс не удаляет их сам и начинает "засирать" (прошу прощения) память.

функция sys(1104) не помогает
я не могу делать clear all

люди, скажите, как мне правильно удалять созданные мною объекты, не складывая их в отдельный массив, а храня так, как я показал ?
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33677996
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ээээ - тогда перед убиением TreeView бегать по всем узлам и лично приписывать .NULL. в Tag. IMHO
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678006
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но из дерева может быть удалена вершина и во время работы (то есть не все разом), а события удаления вершины, как такового, нет

я бы не заморачивался так, если бы у меня не было иерархии классов (субкласс на субклассе субклассом погоняет)

и ваще, я не могу нигде прочитать, че делает фокс, когда я делаю следующее
Код: plaintext
1.
o1 = creatobject("custom")
o2 = o1
он копирует только указатель на объект или копирует весь объект ?

а когда я делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
function myfunc
lparameters p1
return p1

o1 = createobject("custom")
o2 = myproc(o1)
o3 = myproc(@o1)
и еще у меня вопрос - можно ли обойтись БЕЗ создания объектов (custom), а вместо этого использовать массив из трех элементов (MyProp1/2/3) и приравнивать этот массив к тагу каждого узла ?
как приравнять-то ?
Код: plaintext
1.
2.
DIMENSION aMyProps[ 3 ]
aMyProps[...] = ...
oNode.Tag = aMyProps
ведь так приравнивается только первый элемент
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678082
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока объест явно не создается - все осталное будет только ссылками на него
А про массив - дык сделай массив такой что бы влезли все узлы и в Tag храни только индекс массива
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678126
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо, это наилучший вариант - использовать массив

вот только вопрос - мне нужно будет под конец работы элементы в массиве приравнивать к NULLю, если я вдруг захочу там хранить объекты ?
или фокс это сделает за меня ?
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678207
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Store .NULL. to MyArray
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678264
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоесть мне все же нужно заботиться об обNULLении массива ?

фокс сам не понимает, что там ссылки на объекты ?
сам не удаляет их при удалении массива ?
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33678303
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так - то удалит конечно
...
Рейтинг: 0 / 0
MEMORY LEAK
    #33679517
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, в описании к TreeView говорится, что свойство TAG может иметь только символьный тип данных. То, что он принимает в качестве значения тип Object - это уже какая-то "заплатка" собственно FoxPro. Например, в VFP6 на такую попытку пойдет ругань.

Следовательно, лучше такого не делать. Последствия могут быть не предсказуемые.

Лично я сделал бы курсор (CREATE CURSOR ...). В качестве ключа можно использовать ключ узла TreeView. Поля - это дополнительные свойства.

Если курсор кажется не удобным, то используй класс Collection. Опять же, ключ - это ключ узла TreeView. Если в качестве элемента Collection использовать опять класс Collection, то получишь аналог двумерного массива, но обращение к элементам не по номерам, а по имени.

Или несколько объектов Collection каждый из которых будет хранить только одно свойство для узла.

В общем, я бы не стал хранить наборы дополнительных свойств в самом TreeView.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MEMORY LEAK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]