Кольцевые ссылки в скриптах 1С

Программирование - Практика программирования

старое, неправильное, название публикации "Перем Форма Экспорт;"

Памяти много не бывает. Для того, чтобы памяти все-таки хватало, «взрослые» программисты, такие как разработчики среды программирования (платформы), обычно заботятся о так называемых «сборщиках мусора» - механизмах, освобождающих оперативку от отработавших кусков кода. Ну, они должны это делать… Ну, по крайней мере, они нам говорят, что делают это. К сожалению, это у них не всегда получается одинаково хорошо. А кто совершенен?

Внимание! Нападки автора на Экспорт вызваны необъяснимой невнимательностью при исследовании казуса. К правильному пониманию явления подвигают комменты  (поставил все-таки минус :))

 

Предлагаемая обработка иллюстрирует тезис. Просто отройте её и закройте.

Рис.1 

Ничего страшного не произойдет (правда, правда, модуль открыт, можете убедиться сами).

Рис.2

Конечно, чтобы всё-таки избавиться от формы, придётся закрыть платформу (каламбурчик!), но перезагружать виндовс не надо.

 

Казус возникает, если экспортной переменной модуля (формы или объекта, все равно) присвоить значение самой формы. потому, что разработчики не стали решать существующую во "взрослых" средах проблему чистки мусора, а просто переложили ее на плечи скриптописателей.

 

Обнаруженные эффекты:

 

  1. если вызвать контекстное меню на кнопке окна предприятия в панели окон виндовса, форма затаится

Рис. 3

, но если не закрыть окно, продолжит виртуально быть.

 

  1. если открыть/закрыть форму еще раз, они будут в памяти обе две

Рис. 4

Можно было бы еще поковыряться, пофантазировать о полезном использовании фичи (или бага?), но с отличной от нуля вероятностью «взрослые дяди» могут подрихтовать свою продукцию, так что в сухом остатке публикации – только бесплатный совет:

Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт.

Или убивайте их нах, чисто не там, где убирает 1с, а там, где не мусорят 1сники.

Скачать файлы

Наименование Файл Версия Размер
РоскошныйГлюк.epf
.epf 6,28Kb
28.12.09
53
.epf 6,28Kb 53 Скачать

См. также

Комментарии
1. Александр Рытов (Арчибальд) 2659 28.12.09 09:54 Сейчас в теме
Вообще-то оставление "висячих ссылок" всегда считалось у программистов моветоном. К сожалению, зачастую сейчас смешиваются понятия программиста и пользователя программной платформы...
2. Михаил Ражиков (tango) 474 28.12.09 10:03 Сейчас в теме
Арчи, одно дело, когда "висячая ссылка" - "в никуда", точнее - туда, где уже совсем другое, другое - когда и ссылки-то уже нет (попробуй ка подцепить незавершившийся процесс "закрытой" формы) а кусок кода - живет и здравствует, мало того - не только память занимает, но и процессор грузит в забытом цикле...
Вот, думается, не потому ли конфигуратор время от времени схлопывается, что 1сина так же грязно работает и в этом режиме?
3. Александр Рытов (Арчибальд) 2659 28.12.09 10:17 Сейчас в теме
(2) Я это и имел в виду. Не просто убить ссылку, но сначала убить то, на что она ссылается. Помню, была в Эльбрусе процедурка с двусмысленным именем ВернутьПамЯть :D
4. Михаил Ражиков (tango) 474 28.12.09 10:25 Сейчас в теме
А как?
Сделаем в ПриЗакрытии
Фрм = "";
Допустим (не факт), это убъет ее циклы и даже созданные в ней локальные переменные.
Сама-то она останется в памяти как пустая строка (или нет?)!
Если же обращение к такой форме происходит достаточно часто (в большом цикле), то ссылки даже на пустую строку в конце концов забьют сколь угодно большой, но конечный, объем.
5. steban (steban) 71 28.12.09 10:46 Сейчас в теме
1С использует подсчет ссылок (reference counting) а не сборку мусора. Так что надеяться на уничтожение объектов, на которые не осталось внешних ссылок, не стОит. При достаточной изворотливости можно наделать циклических ссылок и утечек памяти.
antonio22; artbear; Арчибальд; +3 Ответить 2
6. Александр Рытов (Арчибальд) 2659 28.12.09 10:53 Сейчас в теме
(4) "Как" - вопрос другой. Подозреваю, что ответ на него может варьироваться в зависимости от всяких сопутствующих факторов. Вон, лисповцы только и делают, что совершенствуют сбор мусора.
Важно то, что разработчик должен учитывать возможность появления мусора. А предупрежден - значит, вооружен.
7. Михаил Ражиков (tango) 474 28.12.09 11:36 Сейчас в теме
(5) значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг, и можно смотреть на полезное использование?
8. Михаил Ражиков (tango) 474 28.12.09 11:40 Сейчас в теме
Определение: reference counting

Подсчёт ссылок. Алгоритм сборки мусора, ведущий для каждого объекта программы подсчёт текущего числа других объектов, которые на него ссылаются. Если это число становится равным нулю, память соответствующего объекта можно безопасно освободить, а общее число ссылок каждого из ссылающихся на него других объектов уменьшить на единицу. У этого алгоритма возникают проблемы с объектами, ссылающимися друг на друга по кольцу, так как у них число ссылок никогда не бывает меньше 1.

http://www.pcmag.ru/encyclopedia/term.php?ID=4091
9. Михаил Ражиков (tango) 474 28.12.09 11:43 Сейчас в теме
Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.

Локальные имена - имена, которым присвоено значение в данном блоке кода. Глобальные имена - имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена - имена из специального словаря __builtins__.

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

Так как переменную можно связать с объектом в любом месте блока, важно, чтобы это произошло до ее использования, иначе будет возбуждено исключение NameError. Связывание имен со значениями происходит в операторах присваивания, for, import, в формальных аргументах функций, при определении функции или класса, во втором параметре части except оператора try-except.

С областями видимости и связыванием имен есть много нюансов, которые хорошо описаны в документации. Желательно, чтобы программы не зависели от таких нюансов, а для этого достаточно придерживаться следующих правил:

Всегда следует связывать переменную со значением (текстуально) до ее использования.
Необходимо избегать глобальных переменных и передавать все в качестве параметров. Глобальными на уровне модуля должны остаться только имена-константы, имена классов и функций.
Никогда не следует использовать from модуль import * - это может привести к затенению имен из других модулей, а внутри определения функции просто запрещено.
Предпочтительнее переделать код, нежели использовать глобальную переменную. Конечно, для программ, состоящих из одного модуля, это не так важно: ведь все определенные на уровне модуля переменные глобальны.

Убрать связь имени с объектом можно с помощью оператора del. В этом случае, если объект не имеет других ссылок на него, он будет удален. Для управления памятью в Python используется подсчет ссылок (reference counting), для удаления наборов объектов с зацикленными ссылками - сборка мусора (garbage collection).
http://www.intuit.ru/department/pl/python/1/7.html
10. Михаил Ражиков (tango) 474 28.12.09 11:45 Сейчас в теме
Главное достоинство подсчета ссылок перед отслеживающими сборщиками мусора в том, что объекты удаляются сразу как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определенным временем жизни каждого объекта.
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82_%D1%81%D­1%81%D1%8B%D0%BB%D0%BE%D0%BA
11. Михаил Ражиков (tango) 474 28.12.09 11:46 Сейчас в теме
Основные понятия сборки мусора. Для системы управления памятью работа приложения может быть представлена как последовательность обращений к памяти. Связанная совокупность данных, создаваемая в результате размещения объектов, назначения и модификации указателей, может рассматриваться как направленный граф достижимости, узлами которого являются используемые объекты в куче, а связями – указатели. Исходное множество ссылок (root set), задается набором ячеек памяти, хранящихся вне области кучи и содержащих указатели на объекты в куче. Root set может состоять из статических переменных, объектов системных классов, локальных переменных процедур, регистров и т.д.

Существующие методы сборки мусора делятся на трассирующие и использующие счетчики ссылок.

Трассирующие методы сборки мусора основаны на определении полного графа достижимости. Сборка начинается со сканирования исходного набора указателей, далее происходит обход графа с обработкой достижимых объектов. В конце обхода, когда все достижимые объекты определены, память, занятая недостижимыми объектами, считается свободной. Достижимые объекты считаются живыми, а недостижимые относят к множеству свободных.

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

http://www.swsys.ru/index.php?page=article&id=963
12. Михаил Ражиков (tango) 474 28.12.09 11:49 Сейчас в теме
(10) vs (5)
если 1с - это подсчет ссылок (5), то, по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
Вопрос - как?
13. Вячеслав Кадацкий (marsohod) 120 28.12.09 11:55 Сейчас в теме
(0) :o :o :o
(6)
предупрежден - значит, вооружен
как это верно...
14. steban (steban) 71 28.12.09 12:05 Сейчас в теме
(12)
по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
из (10) не следует возможность сослаться на неудаленный объект, на который нет внешних ссылок
15. steban (steban) 71 28.12.09 12:10 Сейчас в теме
+(14) то, что я назвал "внешними ссылками", в (11) описано как rootset
16. Михаил Ражиков (tango) 474 28.12.09 12:15 Сейчас в теме
т.е., назначив форме обработчик ожидания, мы создали кольцо взаимных "внутренних" ссылок?
17. steban (steban) 71 28.12.09 12:26 Сейчас в теме
(16)нет.
вот эта строка приводит к созданию циклических ссылок:
Фрм = ПолучитьФорму("Форма")
Если ее убрать, то "роскошный глюк" таковым быть перестанет
18. steban (steban) 71 28.12.09 12:38 Сейчас в теме
значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг
скорее всего - да
19. Михаил Ражиков (tango) 474 28.12.09 12:48 Сейчас в теме
(17) если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа.
Наверное, кольца ссылок все-таки нет, есть некая "внутренняя", которая порождается Экспротом
**
и не очищается при закрытии формы
20. steban (steban) 71 28.12.09 12:52 Сейчас в теме
если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа
убрал Экспорт. Форма не умерла.
Движок 8.1.14
21. steban (steban) 71 28.12.09 12:55 Сейчас в теме
При внимательном чтении описания метода "ПолучитьФорму" в синтакс-помощнике, можно сделать вывод, что Фрм=ПолучитьФорму("Форма") эквивалентно Фрм=ЭтаФорма
22. Михаил Ражиков (tango) 474 28.12.09 12:58 Сейчас в теме
(20) упс... сейчас посмотрю, умиралажже
23. steban (steban) 71 28.12.09 13:00 Сейчас в теме
Фрм = ПолучитьФорму("Форма",,3)

возвращается новая форма, циклических ссылок нет, все умирают.
24. steban (steban) 71 28.12.09 13:03 Сейчас в теме
Создай новую внешнюю обработку, в ее модуле напиши
Перем Т;

Т=Новый ТаблицаЗначений();
Т.Колонки.Добавить("т");
Для Сч=1 По 1000000 Цикл
	Стр=Т.Добавить();
	Стр.Т=Т;
КонецЦикла; 
...Показать Скрыть

При каждом открытии обработки количество памяти, используемой процессом 1с, будет расти. Это является косвенным подтверждением того, что в 1с именно "подсчет ссылок", а не "сборка мусора"
25. Михаил Ражиков (tango) 474 28.12.09 13:03 Сейчас в теме
Вот Ой! так Ой!
правда, не умирает.
стало быть, фрм=ЭтаФорма...
26. Михаил Ражиков (tango) 474 28.12.09 13:07 Сейчас в теме
(24) ок, верю, что так и будет. Однакож, здесь-то где закольцованная ссылка? Т в Т? и, получается, собственно форма как таковая не важна?
27. steban (steban) 71 28.12.09 13:12 Сейчас в теме
Однакож, здесь-то где закольцованная ссылка? Т в Т?

после окончания цикла счетчик ссылок на Т будет равен 1000001 (переменная модуля ссылается на Т + миллион ссылок внутри самой Т).
При разрушении объекта обработки счетчик ссылок на Т будет уменьшен на 1, и т.к. он все еще положителен, то Т уничтожена не будет
28. steban (steban) 71 28.12.09 13:13 Сейчас в теме
1. "взрослые дяди" оказались обруганы ни за что,
2.
Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт

сомнительная рекомендация, основанная на ложных выводах
3. "Роскошный глюк" оказался ожидаемым поведением
29. Михаил Ражиков (tango) 474 28.12.09 13:14 Сейчас в теме
Ок, я сообразил, почему на Экспорт погрешил: эксперементировал, когда Фрм была в модуле объекта.
30. Михаил Ражиков (tango) 474 28.12.09 13:15 Сейчас в теме
(28) текст публикации уже поправил, см. первый абзац
31. Михаил Ражиков (tango) 474 28.12.09 13:16 Сейчас в теме
сабж, тем не менее, остается в силе, так или иначе, 1снику надо следить за спиной
32. steban (steban) 71 28.12.09 13:18 Сейчас в теме
(31) рекомендация использовать голову никогда лишней не будет ;)
DMSDeveloper; Арчибальд; +2 Ответить
33. Михаил Ражиков (tango) 474 28.12.09 13:18 Сейчас в теме
блин, сними минус, steban, поправилж
34. steban (steban) 71 28.12.09 13:20 Сейчас в теме
38. Михаил Ражиков (tango) 474 28.12.09 14:38 Сейчас в теме
Имхо, фи к "взрослым" так же остаются в силе.
1. Программеры камней (базовый ввод-вывод)
2. Программеры ОС (виндовс, люникс, etc)
3. Программеры "взрослых" языков (си, паскаль, ява,..)
4. Программеры прикладных пакетов (1с,..)
5. Программеры скриптов (веб-дизайнеры, 1сники,...)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.)).
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена уже и НЕ транслироваться на уровень 5.
39. dushelov (Душелов) 28.12.09 14:49 Сейчас в теме
(38) В C# при возникновении бесконечного цикла срабатывает исключение.
40. steban (steban) 71 28.12.09 15:26 Сейчас в теме
(38)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.))
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена

Я бы не сказал, что она ДОЛЖНА быть решена.
Выбор между RC и GC - это выбор между накладными расходами на сборку мусора или возможными утечками памяти (которых можно избежать). Те, кто проектировал 1С, сделали свой выбор в пользу "возможных утечек".
41. steban (steban) 71 28.12.09 15:29 Сейчас в теме
рискуем скатиться в холивар C++ vs С# :)
42. Михаил Ражиков (tango) 474 28.12.09 15:30 Сейчас в теме
Свой выбор они сделали. Однако в мануалах написать об этом забыли.
43. Михаил Ражиков (tango) 474 28.12.09 15:31 Сейчас в теме
(41) вот, вот. 1сниковское ли это дело?
44. steban (steban) 71 28.12.09 15:42 Сейчас в теме
(42)
Свой выбор они сделали. Однако в мануалах написать об этом забыли.

Диск ИТС.
Методическая поддержка 1С:Предприятия 8.1 -> Методические рекомендации по конфигурированию -> Встроенный язык -> Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки -
значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.

Особенностью подсчета ссылок на объекты является возможность организации "циклической ссылки". Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).

Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.

Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:
1 хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) - ситуация приводит к появлению циклической ссылки - объект (набор записей, форма) никогда не будет уничтожен;
2 хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте - оба объекта никогда не будут уничтожены.

Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения - этого же списка значений, приведет к появлению циклической ссылки.
JohnyDeath; +1 Ответить 2
45. Михаил Ражиков (tango) 474 28.12.09 16:02 Сейчас в теме
(44) ок, дурак, ваше благородие :)
46. Михаил Ражиков (tango) 474 28.12.09 16:08 Сейчас в теме
хм. Выходит, если ты купил 1с, но не подписался на итс, можешь никогда и не узнать всю правду о том, что купил?
47. steban (steban) 71 28.12.09 16:33 Сейчас в теме
Написал бы лучше практический рецепт по нахождению утечек при помощи технологического журнала вместо нападок на разработчиков платформы.
48. Михаил Ражиков (tango) 474 28.12.09 16:49 Сейчас в теме
Технологических журналов в кадетском корпусе не проходили.
Собственно разработчики (типа коллеги) как бы вне критики, ответственность за косяки несут потребители нераспределенной прибыли от продажи продукта ("правообладатели", если можно так выразиться). А уж разработчиков пусть пинают те самые потребители, работа у них такая.
49. Михаил Ражиков (tango) 474 29.12.09 09:12 Сейчас в теме
(28) Нет, это НЕ ожидаемое поведение. Ожидаемое - это закрыли, значит закрыли.
И то, что нам задним числом, за отдельную плату, объяснили (44), чего они НЕ сделали, дела не меняет.
50. Михаил Ражиков (tango) 474 29.12.09 10:04 Сейчас в теме
51. Артур Аюханов (artbear) 864 30.12.09 10:12 Сейчас в теме
Для выравнивания ситуации также минусану.
Давным-давно известная проблема, со времен 7.7 ничего не изменилось :(
Как уже steban написал, 1С выбрала наиболее простой, определенный и быстрый метод.
52. Артур Аюханов (artbear) 864 30.12.09 10:15 Сейчас в теме
Последние абзацы в описании вообще не понятны - кого убивать-то?
53. Дмитрий К. (Dementor) 9 30.12.09 11:09 Сейчас в теме
(46) Не купил, а украл. Практически со всеми конфами (типовыми так точно) идет подписка ИТС на 6 месяцев. Но даже если платформа идет не совсем законным путем, то что мешает "от туда" взять и образ ИТС?

За напоминание про циклические ссылки - спасибо.
54. steban (steban) 71 30.12.09 11:38 Сейчас в теме
2tango
Расскажи мне, пожалуйста, почему выставление минуса публикации ты посчитал личным оскорблением и решил ответить личным оскорблением в описании публикации?
55. Денис Яковлев (iceflash) 4 30.12.09 16:23 Сейчас в теме
Странный "спор". В данном контексте - то, как отрабатывает 1с все верно с точки зрения подсчета ссылок И сборщика мусора.
Всегда поражало, то свойство большинства программистов под платформу 1с незнание основы основ, это печально. Нужно лишь знать мат часть.
Слава богу,что в свое время начинал с низкоуровневых языков, и использую 1с только для разработки решений в силу популярности платформы и соответственно монетизации. Не сочтите никто за оскорбление, просто мнение сформированное на фактах.
DMSDeveloper; Abadonna; +2 Ответить 1
56. steban (steban) 71 13.01.10 11:51 Сейчас в теме
57. Михаил Ражиков (tango) 474 17.02.10 18:09 Сейчас в теме
(54, 56) да ну, какие мелочи между друзьями!
58. Михаил Ражиков (tango) 474 17.02.10 18:14 Сейчас в теме
(55) ты непоследователен. либо 1с подобна тому, с чего ты "начинал", и тогда "отрабатывает 1с все верно", либо это облочка для 1снегов, и тогда закрытие формы должно убивать всё в/из этой формы, есть там где-то какие-то ссылки или нет.

разработчики не стали (поленились, недопёрли) этого сделать. это плохо. в смысле - недостаток оболочки для 1снегов.
62. Артур Аюханов (artbear) 864 18.02.10 09:41 Сейчас в теме
(0) Имей уважение к оппонентам.
Пиши имени/ники оппонентов правильно, а не как тебе хочется.

Некоторые твои сообщения скрыты из-за нарушения п.3 и п.4. правил
63. Михаил Ражиков (tango) 474 18.02.10 10:19 Сейчас в теме
ок, исправлю в публикации своё фырканье в адрес оппонента. тем более, что он фактически соавтор оной :)
64. Сергей Данилов (pencroff) 123 11.03.10 15:01 Сейчас в теме
Здесь все обсуждают то что могут быть кольцевые ссылки и утечки памяти. Подскажите как бороться с этими самыми утечками памяти в скрещенной конфигурации. Скрестили так что месячный документооборот при перепроведени = 1Gb оперативки. Как работать с технологическим журналом? Кто сталкивался с такими вопросами?
66. Алекс Ю (AlexO) 116 27.09.12 13:11 Сейчас в теме
Не знаю, что тут такого сложного, но если на форму есть ссылка (её владелец еще не "отпустил") - она будет "жива".
Соответственно, разработчики пошли по простейшему пути (что не удивительно для разработчиков 1С) и сделали подсчет ссылок "до победного" (пока таковых не останется вовсе - вот тогда объект и уничтожится).
Кто сможет так извернуться, что и владелец не "закроется", д еще и ссылки в цикле начнут плодится от него - ну, молодец значит, такое просто так не сделаешь, значит, так и задумывал изначально.
67. Михаил Ражиков (tango) 474 27.09.12 13:27 Сейчас в теме
(66) AlexO,
такое просто так не сделаешь

если что-то может быть сделано, кто-нибудь это сделает
68. Алексей Новоселов (a-novoselov) 967 22.03.13 15:47 Сейчас в теме
Сбор мусора, коллеги, это прошлый век!))
Посмотрите Win8 (специальные приложения на новом API) или Android - там память очищается всегда автоматически. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы, данные этой программы остаются в оперативной памяти. Зато при повторном запуске мгновенно открывается на том же месте, где закрыл. Сбор мусора - очень дорогостоящая и ни кому не нужная операция. Тем более сейчас даже на мобилках по 2 Гб оперативной памяти ставят, не говоря уж про десктопы. Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора, как о страшном сне. Так же, как когда-то забыли о необходимости встраивать драйвера для всех видео- и звуковых карт в свои приложения, когда вышел DirectX и OpenGL. А вы что думаете по этому поводу?
69. Алекс Ю (AlexO) 116 22.03.13 16:16 Сейчас в теме
(68) a-novoselov,
пометили как не нужную и система сама заменит новыми данными

скажите об этом разработчикам 1С с их бесконечными утечками памяти.
И даже после закрытия программы она остается в оперативной памяти

После закрытия максимум, что останется от "программы" в ОП - это мусор, помеченный "на удаление".
Зато при повторном запуске мгновенно открывается на том же месте, где закрыл.

Вы имеете весьма и весьма отдаленное представление о работе копмьютера, ОС, программ и 1С.
В данном случае - перепутали очистку памяти (сборку мусора) с кэшированием/загрузкой памяти.
Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора

Среди повсеместной деградации все равно останутся люди, которые будут писать встроенные уборщики, чтобы те "не светились" и делали свое дело в "гаджетах, ОС, мобилках.."
Так же, как когда-то забыли о необходимости писать драйвера под все видео- и звуковые карты, когда вышел DirectX и OpenGL
без драйвера до сих пор и во веки, пока не сменится архитектура компьютера и логический принцип его построения, - не будет работать ни одна видео-звуко- и прочая "карта".
DirectX и OpenGL - это бибилиотеки API, к работе и взаимодействию самого устройства внутри/с другими устройствами (за что отвечает драйвер) отношения не имеющие. Названные графические API - отвечают за обработку изображения, и призваны унифицировать написание различнейших графических приложений.
А драйвера пишут те, кто занает, что это такое. Другое дело - многие драйвера все больше и больше встраиваются в ОС, а устройства - все больше унифицируются между собой в логике своей внутренней работы.
70. Алекс Ю (AlexO) 116 22.03.13 16:18 Сейчас в теме
(68) a-novoselov,
Android - там память в принципе не очищается.

архивируется и самовоспроизводится в кремниевых кристаллах?
71. Алексей Новоселов (a-novoselov) 967 22.03.13 16:33 Сейчас в теме
(70) Что за привычка к словам цепляться...

Имелось ввиду память не очищается приложением, а очищается самой системой.
Так же как в Java память очищается средой исполнения а не конечной программой. И 1С сама память очищает, за редким исключением)

(69) А про OpenGL имелось ввиду не разработка драйверов в принципе, а то что их не нужно стало включать в каждую игру. Помните под ДОСом чтобы что-то запустить сперва конфигурируешь настройки встроенных драйверов через setup.exe... Прописываешь IRQ и DMA каналы для звуковой карты и т.д. Я не про производителей оборудования говорил, что им не нужно будет драйвера писать, а про разработчиков конечных приложений для пользователей.
72. Алекс Ю (AlexO) 116 22.03.13 16:58 Сейчас в теме
(71) a-novoselov,
а то что их не нужно стало включать в каждую игру.

Так это и есть применение унификации через API, а не встройка драйверов устройств - в игры. Вы же пишите про драйвера к устройствам, а не к играм.
Прописываешь IRQ и DMA каналы для звуковой карты

Только лишь потому, что плата не предоставляла такую информацию драйверу, и приходилось их размещать вручную. Сейчас - предоставляет, и драйвер настраивается на "все те же прерывания" автоматически.
а про разработчиков конечных приложений для пользователей.

унификация работы драйверов с API ведет к унификации работы конечных приложений с этими API.
Т.е. ничего, по сути, не изменилось, а только приложения стали автоматически через API и драйвер устройства взаимодействовать с устройством и настраиваться.
Имелось ввиду память не очищается приложением, а очищается самой системой.

Посмотрите, что сами же и написали:
Посмотрите Win8 ... или Android - там память в принципе не очищается. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы она остается в оперативной памяти.
73. Алексей Новоселов (a-novoselov) 967 22.03.13 17:37 Сейчас в теме
(72) Изменил сообщение, чтобы сложнее было к словам придираться... Так что же, все таки, думаете по сути вопроса? а не про глубину и широту ваших познаний в области архитектуры ПК перед моими... Нужна будет забота об очистке памяти разработчикам конечных приложений для пользователей?
74. Алекс Ю (AlexO) 116 22.03.13 17:40 Сейчас в теме
(73) a-novoselov,
Нужна будет забота об очистке памяти

А как вы представляете без этого? :)
Самоочищающийся модуль памяти? Так еще не изобрели такого.
75. Михаил Ражиков (tango) 474 30.08.13 14:30 Сейчас в теме
Ладно. Тема, похоже, бессмертна, как перенумератор.
76. Алекс Ю (AlexO) 116 17.10.13 11:21 Сейчас в теме
(75) tango,
На самом деле, почему бы просто не написать:
- не пользуйте во внешних отчетах, обработках присвоение в переменной уровня модуля объекта - ссылки на какую-либо форму этой же обработки/отчета
Перем Форма; Форма = ПолучитьФорму("ДопФорма"); Форма.Открыть();
, т.е. не делать циклическую ссылку на сам объект (внешнюю обработку/отчет) через вызов формы как части этого объекта, а если есть в этом нужда - ПриЗакрытии явно очищать эту переменную Форма;
- не пользуйте во внешних отчетах, обработках присвоение переменной уровня модуля объекта/реквизиту объекта - установку ссылки на саму себя "любимую", тем более - в цикле а-ля пример из ( 24) (а для реквизита внешней обработки/отчета - избегать присвоение ему ссылки на него самого, как в коде, так и в задании Типданных "вручную" в "Свойствах").
Так как 1С не осилила разработать механизм разрешения ссылочных конфликтов и отследить, что ссылка закольцевалась на саму себя, и указатель в подсчете ссылок - создан ей же самой, и также подлежит стиранию, как и создавший этот указатель "родительский" объект, то все возложено на конечных программистов: либо избегать такой ссылочности, либо вовремя принудительно уничтожать объект, содержашщий "указатель" на себя самого, например, явным присвоением "Форма = Неопределено".
А то на ИТС это занимает целую страницу "мелким почерком", да еще и в разных местах, да еще и не все варинаты и неполное описание....
77. Михаил Ражиков (tango) 474 17.10.13 11:29 Сейчас в теме
(76) AlexO, привет
почему бы просто ни написать

Потому что изначально - "доступно и всериоз"
Потому что до сих пор предмет гордости - прибыль на количество сотрудников
"пипл схавает"
**
да, еще: "Проблемы индейцев вендора не...". Ну то есть клиентами для флагмана являются франи, а не конечные юзеры
78. Алекс Ю (AlexO) 116 17.10.13 11:40 Сейчас в теме
(77) tango,
у меня вообще подозрение, что внутри 1С в части разработки платформы, методологии и написания справок/ИТС все еще более запутанно и "не по уму" :)
Об этом в этом сообщении.
79. Михаил Ражиков (tango) 474 17.10.13 11:59 Сейчас в теме
(78) AlexO, Что творится в кишках вендора, можно только строить предположения.
Мое предположение такое, что кирпичи пирамиды вендора ориентированы более на "чего изволите", нежели на качество продукта.
80. Алекс Ю (AlexO) 116 17.10.13 14:29 Сейчас в теме
(79) tango,
Привет, конечно же :)
более на "чего изволите"

А кто вот предъявляет это "изволяю"?! Вот его и надо вывесить .... на всеобщее обозрение...
Оставьте свое сообщение