HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. Read more...
Bug #999168
openНеожиданное поведение индексов таблицы значений. Создание дублей и длительность обновления.
0%
Description
https://partners.v8.1c.ru/forum/t/2217947/m/2217947
1С 8.3.0-27
Проблема
Неожиданное поведение индексов таблицы значений. Создание дублей и длительность обновления.
Воспроизведение
Открыть приложенную внешнюю обработку в управляемом клиентском приложении. Нажать кнопку "Команда1". При этом на сервере выполнится код
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Данные");
ТаблицаЗначений.Колонки.Добавить("Индекс");
Для Счетчик = 1 По 100000 Цикл
ТаблицаЗначений.Добавить();
КонецЦикла;
ПредДлительность = 0;
Для Счетчик = 1 По 20 Цикл
ТаблицаЗначений.Индексы.Добавить("Индекс");
Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
ТаблицаЗначений.ЗаполнитьЗначения(, "Данные");
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;
Сообщить("Длительность" + Счетчик + "=" + Длительность +", Разница = " + (Длительность-ПредДлительность));
ПредДлительность = Длительность;
КонецЦикла;
и будет выведены сообщения
Длительность1=47, Разница = 47
Длительность2=88, Разница = 41
Длительность3=136, Разница = 48
Длительность4=182, Разница = 46
Длительность5=208, Разница = 26
Длительность6=249, Разница = 41
Длительность7=284, Разница = 35
Длительность8=319, Разница = 35
Длительность9=373, Разница = 54
Длительность10=403, Разница = 30
Длительность11=441, Разница = 38
Длительность12=489, Разница = 48
Длительность13=519, Разница = 30
Длительность14=571, Разница = 52
Длительность15=601, Разница = 30
Длительность16=638, Разница = 37
Длительность17=667, Разница = 29
Длительность18=718, Разница = 51
Длительность19=753, Разница = 35
Длительность20=786, Разница = 33
Из которых следуют выводы
Таблица значений создает дубли индексов, если прикладной код "попросит. Считаю что если индекс уже существует (хотя бы по конкретному имени без перестановок) и его повторно поросят добавить, то логичнее возвращать существующий индекс, чтобы не тратить бесполезно лишнее время на его обновление и хранение.
Каждый индекс занимает время на свое обновление, хотя участвующие в индексе колонки не изменяются. Считаю, что если не изменяются значения в колонках индекса, то платформа не должна обновлять индекс.
Если изменение в колонке носит формальный характер, т.е. фактического изменения значений не происходит (в примере колонки были пустыми и цикл их перезаполняет тем же значением), то индексы обновлять не нужно.
На V8@1c.ru отправил
Files