Публикация

BeginUpdate/EndUpdate

Хочу рассказать об использовании BeginUpdate/EndUpdate в версии 3.4.0. В предыдущих версиях Terrasoft 3.x использовался Lock для окна, который Microsoft реализовал так, что в один и тот же момент в системе может быть «залочено» только одно окно. Это, иногда, приводило к неприятным вещям. Начиная с версии 3.4.0 использование функций BeginUpdate/EndUpdate было разделено:
1. Окна (Window) используют стандартную логику Windows для глобального Lock’а окна
2. Frame, FrameSet, FrameGroup и остальные объекты, которые имеют функции BeginUpdate/EndUpdate, используют собственную функцию Lock’а, которая превосходит по производительности глобальный Lock
Таким образом, если у Вас что-либо меняется во Frame’е или FrameGroup’е, то достаточно «залочить» только их.

В чем же производительность? Как минимум в том, что глобальный Lock при UnLock’е обновляет все окно, независимо от того что в нем поменялось, а Lock для конкретного объекта будет обновлять только его содержимое. Плюс ко всему, если у Вас «залочено» окно с помощью глобального Lock’a, то при каком-либо другом Lock’е в системе, оно будет автоматически «разлочено», чего не произойдет, если «лочить» только нужные объекты

Нравится

Поделиться

2 комментария

Прикольно. Артем, а ведется ли счетчик этих локов? Просто помню в 3.3.2 было такое, что если ты делаешь несколько BeginUpdate() подряд, то столько же должен сделать и EndUpdate(), чтобы окно разлочить.

Счетчик не ведется, достаточно сделать один раз EndUpdate() и объект разлочится, но все же в скриптах должен быть порядок: BeginUpdate == EndUpdate :smile:

Показать все комментарии