Надо ли записывать объект в глобальную переменную, после изменений в нем ?

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Не до конца понял как работать с глобалками, поэтому вот такой вопрос. Кто знает ответ, откликнитесь :az:

Я привык работать с локальными переменными. считал значения , поменял, записал. все четко и понятно.
Но начал работать с глобалками и выяснил что в них можно не только значения передавать, а целые объекты пихать. :cd:
Ну начал работать по той же логике, считал объект, изменил и пихнул обратно. думал там сериализация какая нибудь прикручена... но случайно забыл в одном месте прописать запись в глобалку..... и код все равно отработал как надо :bm:
Подробно что делал
создал объект с начальными данными и пихнул в глобалку:
// новый объект
var test_list = new List<string>();
test_list.Add("start");
project.GlobalVariables.SetVariable("test", "test", test_list);
сразу же вывел в лог
C#:
// объект из глобалки
List<string> test_list_global = (List<string>) project.GlobalVariables["test", "test"].Value;
// вывод объекта в лог
for (int i = 0; i<test_list_global.Count; i++)
{
    project.SendInfoToLog(test_list_global[i]);
}
получил стартовый вариант
85581

теперь добавляю данные
Добавить данные:
// объект из глобалки
List<string> test_list_global = (List<string>) project.GlobalVariables["test", "test"].Value;
// Добавить данные
test_list_global.Add("add");
И вот тут в коде нет записи в глобалку. я в текущем потоке добавил данные и не записал измененный объект в глобалку.
Выполняю код вывода в лог в другом шаблоне и получаю все данные которые внес другой шаблон :bk:
85582

То есть записывая объект в глобалку, мы получаем полнофункциональный развернутый объект в памяти и он доступен всем потокам ?
И не надо делать после изменений объекта project.GlobalVariables.SetVariable("test", "test", test_list_global ); что бы актуализировать его состояние ?
Я к чему это спрашиваю, переживаю за скорость выполнения в многопотоке, ну и конечно лень прописывать запись обратную, тем более что уже разок забыл это сделать. :bk:
И еще волнует вопрос, это стандартное поведение глобальных переменных или возможно как то не так они работают щас и возможно будет фикс и лучше перестраховаться и все таки писать в глобалки принудительно измененный объект ?
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
Значение переменных доступно всем потокам, пока не перезагрузишь постер, а когда постер перезагрузишь, будет значение по умолчанию, у меня таблица номер строки, прочитал строку +1, шаблон отработал и начинает сначала и уже номер строки которую я выставил перед этим в другом потоке.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Значение переменных доступно всем потокам, пока не перезагрузишь постер, а когда постер перезагрузишь, будет значение по умолчанию, у меня таблица номер строки, прочитал строку +1, шаблон отработал и начинает сначала и уже номер строки которую я выставил перед этим в другом потоке.
это понятно. вопрос в другом совсем.
я так и работал раньше , читал и писал значение в глобалку. ну там счетчики как у тебя или строки. щас я могу твою таблицу запихнуть полностью в глобалку и работать с ней в памяти.
Вот хочу выяснить критично ли постоянно записывать объект таблицы в глобалку или достаточно один раз ее туда запихнуть и просто работать как с локальным объектом в коде.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
или пока не перезапустишь шаблон. Так по моему было.
нет. шаблоны не влияют на глобалки. Сам Зеннопостер их держит. Шаблон может только кривой логикой их сбросить до начального состояния.
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
524
Благодарностей
256
Баллы
63

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
ну если глобалки через ссылку работают, то конечно ничего удивительного :bk:
локальные то переменные работают немного по другому.
вообще удобненько, не надо париться с сохранением результата. залочил объект, поработал с ним и все. все данные будут валидные для всех потоков :cd:
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
Глобалка это бомба, но вопрос остался открытым, как это на память влияет
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)