Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужно-ли удалять вложенные таблицы?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
vadim007
Есть таблица значений, в ней есть ссылки на другие таблицы, созданные в процессе работы отчета.
Хватит-ли только одной команды ТЗ_Приход.УдалитьСтроки() для удаления содержимого таблицы, или нужно в цикле поудалять вложенные таблицы, чтобы оперативную память освободить?
XBrut
Не хватит. Надо прицельно освобождать память. В общей таблице находятся лишь ссылки на остальные таблицы.
alex040269
Удаляем таблицу, соответственно - удаляются и ссылки на списки значений, и если больше ссылок нет, т.е. Списки добавлялись примерно так:
тз.Новый();
тз.сз = СоздатьОбъект("СписокЗначений");
, то

доп.действий производить не нужно.

а если

сз = СоздатьОбъект("СписокЗначений");
тз.Новый();
тз.сз = сз;
, то - соответственно - нужно удалять и список...
XBrut
Цитата(alex040269 @ 23.03.12, 8:13) необходимо зарегистрироваться для просмотра ссылки
Удаляем таблицу, соответственно - удаляются и ссылки на списки значений, и если больше ссылок нет, т.е. Списки добавлялись примерно так:
тз.Новый();
тз.сз = СоздатьОбъект("СписокЗначений");
, то
доп.действий производить не нужно.


если некто начнет сомневаться, как это проверить ? smile.gif
alex040269
ну как? Создаем БОЛЬШУЩИЕ ТЗ и СЗ , бегаем отладчиком по строкам и наблюдаем за таскменеджером!!!
vadim007
Цитата(alex040269 @ 23.03.12, 8:13) необходимо зарегистрироваться для просмотра ссылки
Удаляем таблицу, соответственно - удаляются и ссылки на списки значений, и если больше ссылок нет, т.е. Списки добавлялись примерно так:
тз.Новый();
тз.сз = СоздатьОбъект("СписокЗначений");
, то
доп.действий производить не нужно.
а если
сз = СоздатьОбъект("СписокЗначений");
тз.Новый();
тз.сз = сз;
, то - соответственно - нужно удалять и список...

Как программист, я не вижу принципиальных отличий в создании СЗ первым и вторым методом. А то какой-то шаманизм получается: если СЗ присваивать элементу ТЗ через переменную, то это одно, а если напрямую, то это некое другое.

Цитата(XBrut @ 23.03.12, 8:06) необходимо зарегистрироваться для просмотра ссылки
Не хватит. Надо прицельно освобождать память. В общей таблице находятся лишь ссылки на остальные таблицы.

Был-бы это другой язык программирования, я бы с эти утверждением согласился. В случае 1С нужно четко знать. В документации этот момент оговорен?
Vofka
Цитата(vadim007 @ 23.03.12, 9:11) необходимо зарегистрироваться для просмотра ссылки
Как программист, я не вижу принципиальных отличий в создании СЗ первым и вторым методом.

Во втором случае ссылка на список значений будет существовать в переменной сз даже, если вы удалите таблицу значений. А в первом случае ссылок на список значений не будет нигде, после удаления таблицы значений.

Но я согласен с тем, что так ли это именно в 1С (ещё и 77) - знает, наверное, только Боря.
Ardi
Если длительном цикле внутри цикла 1с не падает и память не растёт - значит всё впорядке.
vadim007
Написал обработку для теста на использование памяти. Поместил ее в хранилище необходимо зарегистрироваться для просмотра ссылки
Когда задал число уровней дерева 1000000, 1С загнулась с таким вот сообщением:
Ardi
с хранилищем что-то не то.
MATEVI
Цитата(Ardi @ 23.03.12, 13:11) необходимо зарегистрироваться для просмотра ссылки
с хранилищем что-то не то.

Уже то
Vofka
Цитата(Ardi @ 23.03.12, 13:11) необходимо зарегистрироваться для просмотра ссылки
с хранилищем что-то не то.

Уже "то"

Цитата(MATEVI @ 23.03.12, 13:15) необходимо зарегистрироваться для просмотра ссылки
Уже то

Прям в один голос smile.gif
MATEVI
Глюки с переключателем.
Удалить(<<?>>)
Недостаточно фактических параметров
mister-x
Цитата(vadim007 @ 23.03.12, 12:33) необходимо зарегистрироваться для просмотра ссылки
Когда задал число уровней дерева 1000000, 1С загнулась с таким вот сообщением:

подымите мне веки - не вижу wink.gif
vadim007
Исправил и перезалил там же. Прошу прощения - спешка.
alex040269
Цитата(vadim007 @ 23.03.12, 9:11) необходимо зарегистрироваться для просмотра ссылки
Как программист, я не вижу принципиальных отличий в создании СЗ первым и вторым методом. А то какой-то шаманизм получается: если СЗ присваивать элементу ТЗ через переменную, то это одно, а если напрямую, то это некое другое.
Был-бы это другой язык программирования, я бы с эти утверждением согласился. В случае 1С нужно четко знать. В документации этот момент оговорен?


в теории:

сз = СоздатьОбъект("СписокЗначений");
сз = СоздатьОбъект("СписокЗначений");


должна освобождаться память, которая выделена первым оператором и выделяться вторым.
Ardi
Так а какой ответ на главный вопрос?
logist
Цитата(Ardi @ 23.03.12, 22:58) необходимо зарегистрироваться для просмотра ссылки
Так а какой ответ на главный вопрос?

42
Ardi
Цитата(logist @ 24.03.12, 0:00) необходимо зарегистрироваться для просмотра ссылки
42

Что-ж вы так долго молчали. Вон человек даже программу для компьютера написал чтобы узнать ответ на главный вопрос.

А программа работала, работала и вылетела через 1 миллион циклов.
vadim007
Цитата(Ardi @ 23.03.12, 23:58) необходимо зарегистрироваться для просмотра ссылки
Так а какой ответ на главный вопрос?

Раз 1С - интерпретатор, а не компилятор, то то дерево можно удалить, "обнулив" корень дерева. При этом вся структура удалится автоматически.
Ведь удаляются-же СЗ, или ТЗ, присвоением пробела или нуля, переменной типа СЗ или ТЗ. И какая разница, что там дальше содержится в этой ТЗ.
Есть другие мнения?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.