- Регистрация
- 06.11.2018
- Сообщения
- 11 790
- Благодарностей
- 5 720
- Баллы
- 113
Не до конца понял как работать с глобалками, поэтому вот такой вопрос. Кто знает ответ, откликнитесь
Я привык работать с локальными переменными. считал значения , поменял, записал. все четко и понятно.
Но начал работать с глобалками и выяснил что в них можно не только значения передавать, а целые объекты пихать.
Ну начал работать по той же логике, считал объект, изменил и пихнул обратно. думал там сериализация какая нибудь прикручена... но случайно забыл в одном месте прописать запись в глобалку..... и код все равно отработал как надо
Подробно что делал
сразу же вывел в лог
получил стартовый вариант
теперь добавляю данные
И вот тут в коде нет записи в глобалку. я в текущем потоке добавил данные и не записал измененный объект в глобалку.
Выполняю код вывода в лог в другом шаблоне и получаю все данные которые внес другой шаблон
То есть записывая объект в глобалку, мы получаем полнофункциональный развернутый объект в памяти и он доступен всем потокам ?
И не надо делать после изменений объекта project.GlobalVariables.SetVariable("test", "test", test_list_global ); что бы актуализировать его состояние ?
Я к чему это спрашиваю, переживаю за скорость выполнения в многопотоке, ну и конечно лень прописывать запись обратную, тем более что уже разок забыл это сделать.
И еще волнует вопрос, это стандартное поведение глобальных переменных или возможно как то не так они работают щас и возможно будет фикс и лучше перестраховаться и все таки писать в глобалки принудительно измененный объект ?
Я привык работать с локальными переменными. считал значения , поменял, записал. все четко и понятно.
Но начал работать с глобалками и выяснил что в них можно не только значения передавать, а целые объекты пихать.
Ну начал работать по той же логике, считал объект, изменил и пихнул обратно. думал там сериализация какая нибудь прикручена... но случайно забыл в одном месте прописать запись в глобалку..... и код все равно отработал как надо
Подробно что делал
создал объект с начальными данными и пихнул в глобалку:
// новый объект
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]);
}
теперь добавляю данные
Добавить данные:
// объект из глобалки
List<string> test_list_global = (List<string>) project.GlobalVariables["test", "test"].Value;
// Добавить данные
test_list_global.Add("add");
Выполняю код вывода в лог в другом шаблоне и получаю все данные которые внес другой шаблон
То есть записывая объект в глобалку, мы получаем полнофункциональный развернутый объект в памяти и он доступен всем потокам ?
И не надо делать после изменений объекта project.GlobalVariables.SetVariable("test", "test", test_list_global ); что бы актуализировать его состояние ?
Я к чему это спрашиваю, переживаю за скорость выполнения в многопотоке, ну и конечно лень прописывать запись обратную, тем более что уже разок забыл это сделать.
И еще волнует вопрос, это стандартное поведение глобальных переменных или возможно как то не так они работают щас и возможно будет фикс и лучше перестраховаться и все таки писать в глобалки принудительно измененный объект ?