|
Время жизни обработки | ☑ | ||
---|---|---|---|---|
0
DrLekter
27.03.13
✎
16:25
|
Возник такой вопрос: если в некой форме выполнить код "Обработки.<ИмяОбработки>.Создать()" и как-то воспользоваться полученным объектом, то когда он будет уничтожен (явно это сделать вроде бы нельзя)? При закрытии клиента, при закрытии вызвавшей обработку формы или при завершении вызвавшей процедуры? (Вариант - НИКОГДА :)))) )
|
|||
1
ДенисЧ
27.03.13
✎
16:27
|
Когда выйдет из Scope
|
|||
2
Kreont
27.03.13
✎
16:29
|
Разве ="" не убьет?
|
|||
3
Reset
27.03.13
✎
16:30
|
(0) Смотря как воспользоваться
Если корректно, то будет уничтожен при уничтожении переменной |
|||
4
Reset
27.03.13
✎
16:30
|
(3) или явно при (2)
|
|||
5
DrLekter
27.03.13
✎
23:36
|
Переменная, объявленная в процедуре, умирает с её завершением? Тогда я спокоен :)
Ну и за (2) спасибо - как бы очевидно, но не додумался ) |
|||
6
Rovan
гуру
28.03.13
✎
08:27
|
(5) а если бы это было не так, то что бы стал делать ? -
программировать с плохим чувством о зависшей памяти под обработкой ?? |
|||
7
vde69
28.03.13
✎
08:38
|
старый баян
запускаем обработку, в нем стартуем обработчик ожидания, обработку убиваем, а обработчик работает :) |
|||
8
mzelensky
28.03.13
✎
08:47
|
(5) ну ток наверное не ="", а =NULL
|
|||
9
ДенисЧ
28.03.13
✎
08:48
|
(8) Во первых, не NULL, а неопределено, а во-вторых, хоть 10, хоть Справочники.Контрагенты.СоздатьГруппу()...
|
|||
10
mzelensky
28.03.13
✎
08:48
|
(7) Ну так обработчик ожидания это совсем другое.
Кстати, а сама процедура обработчика находится где?! |
|||
11
mzelensky
28.03.13
✎
08:49
|
(9) почему не NULL ?! Вроде NULL более "пустое" ,чем Неопределено
|
|||
12
mikecool
28.03.13
✎
08:51
|
(11) щас Ненавижу 1С тебе из бани ответит...
|
|||
13
ДенисЧ
28.03.13
✎
08:52
|
(11) NULL только из запроса можно получить :-)
|
|||
14
mikecool
28.03.13
✎
08:53
|
(13) да ладно..
|
|||
15
mzelensky
28.03.13
✎
08:56
|
(13) кто мне запрещает сделать так:
Чс=1; Сч=NULL; Переменная "СЧ" должна быть "убита". Значение типа Неопределено используется прежде всего как значение по умолчанию (незаданное значение) для полей с составным типом. Например, если есть реквизит, который имеет составной тип, включающий СправочникСсылка.Товары и СправочникСсылка.Материалы, то значением реквизита по умолчанию будет Неопределено. Так же это значение используется и в других случаях для обозначения неуказанного значения. Значение типа Null используется при работе с таблицами прикладных объектов. Оно обозначает отсутствие значения поля в выборке. Прежде всего оно используется в результатах запросов выполняющих левое или правое соединение. Поля невыбранных записей таблиц участвующих в таких соединениях будут иметь значение Null. Кроме того, значение типа Null будет иметь, например, реквизит иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов не являющихся группами. Честно, не вижу протеворечий в убивании переменной через NULL! |
|||
16
ДенисЧ
28.03.13
✎
08:58
|
(15) Я ж тебе говорю - убивай через что угодно, главное - этой переменной новое значение присвоить. Тогда gc пробежится в своё время и зачистит.
|
|||
17
mzelensky
28.03.13
✎
08:58
|
(15) а если уж идти от "СИ" (на котором собственно 1С-ка и написана), то там НЕТ такого как "НЕОПРЕДЕЛЕНО" и переменные убиваются именно через "NULL" (ну это я так, для справки...думаю все местные это и так знают).
А поэтому можно сделать гипотетический вывод, что правильнее убивать через "NULL" |
|||
18
mzelensky
28.03.13
✎
09:01
|
Я всегда, для себя, понимал так:
Неопределено - стирает значение переменной, но при этом в памяти все же что-то висит (т.е. по сути сама переменная все еще существует), а NULL вроде как должен полность убирать переменную из памяти. Как бы ток это проверить :( |
|||
19
ДенисЧ
28.03.13
✎
09:02
|
(17) в СИ вообще неправильно убивать объекты присваиванием другого значения. Там нужно явно вызывать очистку :-)
Если ты напишешь char* mystr = malloc(10); mystr = nul; //или как там оно пишется то ты получишь утечкку памяти.ю А вот в шарпе или других языках с gc - убивать можно, как я говорю и повторяю в третий раз, присваиванием любого другого значения. |
|||
20
ДенисЧ
28.03.13
✎
09:02
|
(18) Хватит нести антинаучные бредни.
|
|||
21
mzelensky
28.03.13
✎
09:03
|
(20) просто интересно.
|
|||
22
НафНаф
28.03.13
✎
09:04
|
какая разница когда? у вас все равно деструкторов нет
|
|||
23
mzelensky
28.03.13
✎
09:06
|
(20) (22) вот что в памяти висит, когда переменной присваиваешь значение "неопределено" ?! Ведь какое-то пространство в памяти переменная все-равно занимает?!
|
|||
24
mzelensky
28.03.13
✎
09:07
|
(19) и кстати, на сколько я помню СИ, то в (19) ты сделал ссылку на некую переменную. А потом убил ее. Т.е. убил не саму переменную, а именно ссылку на нее.
Хотя может я просто забыл СИ |
|||
25
НафНаф
28.03.13
✎
09:15
|
А = Обработки.Моё.Создать();
Б = А; А = Неопределено; //разве память под обработку освободилась? нет конечно! |
|||
26
ДенисЧ
28.03.13
✎
09:16
|
(24) Я сделал не только ссылку (точнее указатель), но и выделил под неё место.
|
|||
27
mzelensky
28.03.13
✎
09:18
|
(25) не совсем понял примера.
СОздал обработку. Засуну лв одну переменную, а потом приравнял другой и после убил первую. В чем фишка?! |
|||
28
НафНаф
28.03.13
✎
09:20
|
(27) в том, что обработка все еще жива и память освободиться не может
а вообще какая разница когда? этот процесс практически неуправляем не думаю, что как только ссылок нет на область, то сразу освобождается память, это не рационально |
|||
29
ДенисЧ
28.03.13
✎
09:25
|
(28) не сразу, а с периодичностью цикла gc
|
|||
30
mzelensky
28.03.13
✎
09:27
|
это можно отнести в раздел
"НЕИЗВЕЕЕДАНННННОЕ !!!" И в конце с припиской "Бу-ГА-ГА" |
|||
31
DrLekter
28.03.13
✎
20:11
|
(6) ну не просто беспокоился бы, а подумал, как обойтись без вызова обработки )
(7) годный изврат :) |
|||
32
YHVVH
28.03.13
✎
20:28
|
Не надо извращаться над 1с
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |