|
что работает быстрее соответствие, список значений или таблица значений | ☑ | ||
---|---|---|---|---|
0
jenny_tea
22.01.13
✎
13:34
|
Изначально есть такая таблица тДанных имеющая 2 колонки: Подразделение и Метка.
Если необходимо в последствии несколько раз обрабатывать таблицу так что для некоторого массива будет выбираться соответствие по текущему подразделению его метки, т.е. примерно так Для Текстрока из ДругогоМассива Цикл если тДанных.Найти(текСтрока.Подразделение,"Подразделение") тогда Текстрока.Флаг = тДанных.Метка конецесли; конеццикла; Будет ли быстрее если заранее сделать спАктивныхПодразделений куда закидывать все значения подразделений с активной меткой, а в цикле делать если спАктивныхПодразделений.НайтиЗначение(Текстрока.Подразделение)<>Неопределено Тогда Текстрока.Флаг = Истина; Иначе Текстрока.Флаг = Ложь; КонецЕсли; Или сделать НекоеСоответствие с Ключом -Подразделение и Значением Флаг И тогда текФлаг = НекоеСоответствие.Получить(текстрока.подразделение); Если текФлаг<>Неопределено Тогда ТекСтрока.Флаг = текФлаг; конецЕсли; Вопрос: как по скорости работают эти методы, что быстрее, т.е. сравнивая тДанных.Найти(Значение,"Колонка"); спЗначений.НайтиЗначение(Значение); НекоеСоответствие.Получить(Значение) |
|||
1
Ник второй
22.01.13
✎
13:35
|
(0) Текущая реализация чем не устраивает?
|
|||
2
vmv
22.01.13
✎
13:35
|
соответствие, ибо примитивнее остальных вариантов и индексировано
|
|||
3
aka AMIGO
22.01.13
✎
13:35
|
в 8-ке нет замеров производительности?
|
|||
4
Buster007
22.01.13
✎
13:39
|
(0) в тДанных добавь индекс на подразделение. А вообще тема бред.
|
|||
5
Fragster
гуру
22.01.13
✎
13:41
|
таблица медленнее всего, массив (ЕМНИП) быстрее всех... когда-то замеры делал, уже не помню. Соответствие - норм.
|
|||
6
GANR
22.01.13
✎
13:41
|
(0) замер производительности в помощь
|
|||
7
Reset
22.01.13
✎
13:46
|
(0)
При поиске соответствие минимально быстрее индексированной таблицы значений, остальные варианты отстают от них. Но не надо забывать учитывать и время создания коллекции для поиска. Может оказаться что пара быстрых поисков не окупит долгую подготовку. Для конкретного выбора -->(6) |
|||
8
jenny_tea
22.01.13
✎
13:57
|
спасибо
|
|||
9
H A D G E H O G s
22.01.13
✎
14:00
|
Хлопнулись штоле все?
2 колонки: Подразделение, Метка Подразделение... Че там их 100500 штук штоле? Какие индексы? ТЗ конечно. |
|||
10
H A D G E H O G s
22.01.13
✎
14:01
|
+ померять производительность, играясь с типизацией колонки.
|
|||
11
H A D G E H O G s
22.01.13
✎
14:03
|
Ну или массив.
|
|||
12
Ns33
22.01.13
✎
14:09
|
Недавно мерял такую штуку: есть массив чисел, посчитать сумму.
На 10'000 элементах: 1. Перебор массива - 280 мс 2. Создание и заполнение ТЗ и выполнение Итог()- 560 мс 3. Только выполнение Итог() - 30 мс. Так что для многократных действий лучше ТЗ. |
|||
13
Fragster
гуру
22.01.13
✎
14:29
|
мЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
мЯваСкрипт.Language = "javascript"; Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Ключ"); ТЗ.Индексы.Добавить("Ключ"); ТЗ.Колонки.Добавить("Значение"); Для Сч = 1 По 1000 Цикл Стр = ТЗ.Добавить(); Стр.Ключ = Сч; Стр.Значение = Сч; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 По 1000 Цикл Стр = ТЗ.Найти(Сч, "Ключ"); Если Стр <> Неопределено Тогда А = Стр.Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Соо = Новый Соответствие; Для Сч = 1 По 1000 Цикл Соо.Вставить(Сч, Сч); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение соответствия: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 По 1000 Цикл Значение = Соо[Сч]; Если Значение <> Неопределено Тогда А = Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в соответствии: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); МассивКлючей = Новый Массив; МассивЗначений = Новый Массив; Для Сч = 1 По 1000 Цикл МассивКлючей.Добавить(Сч); МассивЗначений.Добавить(Сч); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение массива: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 По 1000 Цикл Индекс = МассивКлючей.Найти(Сч); Если Индекс <> Неопределено Тогда А = МассивЗначений[Индекс]; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в массиве: " + Время); |
|||
14
Fragster
гуру
22.01.13
✎
14:30
|
результат:
Заполнение ТЗ: 109 Поиск в ТЗ: 110 Заполнение соответствия: 93 Поиск в соответствии: 172 Заполнение массива: 16 Поиск в массиве: 31 |
|||
15
H A D G E H O G s
22.01.13
✎
14:31
|
(14)
1) Убрать ТЗ.Индексы.Добавить("Ключ"); 2) Перенести ТЗ.Индексы.Добавить("Ключ"); после заполнения |
|||
16
H A D G E H O G s
22.01.13
✎
14:31
|
Что будет?
|
|||
17
Fragster
гуру
22.01.13
✎
14:32
|
для 10000 повторений массив уже отсасывает:
Заполнение ТЗ: 1 172 Поиск в ТЗ: 1 032 Заполнение соответствия: 921 Поиск в соответствии: 1 735 Заполнение массива: 79 Поиск в массиве: 2 062 |
|||
18
Fragster
гуру
22.01.13
✎
14:34
|
(15)(16)
для 1000 итераций: без индекса: Заполнение ТЗ: 94 Поиск в ТЗ: 187 Заполнение соответствия: 78 Поиск в соответствии: 172 Заполнение массива: 16 Поиск в массиве: 31 Индекс после заполнения: Заполнение ТЗ: 203 Поиск в ТЗ: 110 Заполнение соответствия: 93 Поиск в соответствии: 172 Заполнение массива: 16 Поиск в массиве: 31 |
|||
19
Reset
22.01.13
✎
14:38
|
(13) Выполнил у себя:
Заполнение ТЗ: 8 Поиск в ТЗ: 6 Заполнение соответствия: 2 Поиск в соответствии: 3 Заполнение массива: 3 Поиск в массиве: 14 |
|||
20
1Сергей
22.01.13
✎
14:42
|
(13) иде СЗ?
|
|||
21
Reset
22.01.13
✎
14:42
|
(19) При увеличении как размерности коллекций, так и при увеличении количесва повторов массив начинает отставать сильнее, а соотношение соответствия и индексированной тз остаются примерно одинаковыми, т.е. как я и тестировал когда-то ранее.
Непонятно, почему у тебя в(14) соответствие отстало. |
|||
22
Fragster
гуру
22.01.13
✎
14:44
|
Добавил случайности:
мЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); мЯваСкрипт.Language = "javascript"; Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); СлучайныйМассив = Новый Массив; Для Сч = 1 по 1000 Цикл СлучайныйМассив.Добавить(XMLСтрока(Новый УникальныйИдентификатор)); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение ключей: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Ключ"); ТЗ.Индексы.Добавить("Ключ"); ТЗ.Колонки.Добавить("Значение"); Для каждого Ключ Из СлучайныйМассив Цикл Стр = ТЗ.Добавить(); Стр.Ключ = Ключ; Стр.Значение = Ключ; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для каждого Ключ Из СлучайныйМассив Цикл Стр = ТЗ.Найти(Ключ, "Ключ"); Если Стр <> Неопределено Тогда А = Стр.Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Соо = Новый Соответствие; Для каждого Ключ Из СлучайныйМассив Цикл Соо.Вставить(Ключ, Ключ); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение соответствия: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для каждого Ключ Из СлучайныйМассив Цикл Значение = Соо[Ключ]; Если Значение <> Неопределено Тогда А = Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в соответствии: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); МассивКлючей = Новый Массив; МассивЗначений = Новый Массив; Для каждого Ключ Из СлучайныйМассив Цикл МассивКлючей.Добавить(Ключ); МассивЗначений.Добавить(Ключ); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение массива: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для каждого Ключ Из СлучайныйМассив Цикл Индекс = МассивКлючей.Найти(Ключ); Если Индекс <> Неопределено Тогда А = МассивЗначений[Индекс]; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в массиве: " + Время); |
|||
23
Fragster
гуру
22.01.13
✎
14:45
|
интересно, что результаты при этом вообще не изменились...
|
|||
24
Fragster
гуру
22.01.13
✎
14:45
|
надо как-то произвольный поиск организовать...
|
|||
25
Fragster
гуру
22.01.13
✎
14:50
|
мЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
мЯваСкрипт.Language = "javascript"; Размер = 1000; Поисков = 1000; Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); СлучайныйМассив = Новый Массив; Для Сч = 1 по Размер Цикл СлучайныйМассив.Добавить(XMLСтрока(Новый УникальныйИдентификатор)); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение ключей: " + Время); ГСЧ = Новый ГенераторСлучайныхЧисел; Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Ключ"); ТЗ.Индексы.Добавить("Ключ"); ТЗ.Колонки.Добавить("Значение"); Для каждого Ключ Из СлучайныйМассив Цикл Стр = ТЗ.Добавить(); Стр.Ключ = Ключ; Стр.Значение = Ключ; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 по Поисков Цикл Стр = ТЗ.Найти(СлучайныйМассив[ГСЧ.СлучайноеЧисло(0,Размер-1)], "Ключ"); Если Стр <> Неопределено Тогда А = Стр.Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в ТЗ: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Соо = Новый Соответствие; Для каждого Ключ Из СлучайныйМассив Цикл Соо.Вставить(Ключ, Ключ); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение соответствия: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 по Поисков Цикл Значение = Соо[СлучайныйМассив[ГСЧ.СлучайноеЧисло(0,Размер-1)]]; Если Значение <> Неопределено Тогда А = Значение; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в соответствии: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); МассивКлючей = Новый Массив; МассивЗначений = Новый Массив; Для каждого Ключ Из СлучайныйМассив Цикл МассивКлючей.Добавить(Ключ); МассивЗначений.Добавить(Ключ); КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Заполнение массива: " + Время); Время = мЯваСкрипт.Eval("(new Date()).valueOf()"); Для Сч = 1 по Поисков Цикл Индекс = МассивКлючей.Найти(СлучайныйМассив[ГСЧ.СлучайноеЧисло(0,Размер-1)]); Если Индекс <> Неопределено Тогда А = МассивЗначений[Индекс]; КонецЕсли; КонецЦикла; Время = мЯваСкрипт.Eval("(new Date()).valueOf()") - Время; Сообщить("Поиск в массиве: " + Время); |
|||
26
Fragster
гуру
22.01.13
✎
14:52
|
Размер = 10000;
Поисков = 1000; Заполнение ключей: 172 Заполнение ТЗ: 1 219 Поиск в ТЗ: 125 Заполнение соответствия: 938 Поиск в соответствии: 203 Заполнение массива: 94 Поиск в массиве: 1 250 |
|||
27
Reset
22.01.13
✎
14:53
|
Размер = 10000;
Поисков = 1000; Заполнение ключей: 47 Заполнение ТЗ: 84 Поиск в ТЗ: 11 Заполнение соответствия: 26 Поиск в соответствии: 6 Заполнение массива: 24 Поиск в массиве: 413 :) |
|||
28
Fragster
гуру
22.01.13
✎
14:54
|
(27) чота у тебя комп больно быстрый
|
|||
29
Reset
22.01.13
✎
14:56
|
хз
core i5 750 |
|||
30
Reset
22.01.13
✎
14:57
|
Мне удивительней диаметральные результаты ТЗ/Соответствие
|
|||
31
Fragster
гуру
22.01.13
✎
14:57
|
пентиум4 2,8 ггц
|
|||
32
Fragster
гуру
22.01.13
✎
14:58
|
(30) наверное у тебя хэш сильно быстро считается
|
|||
33
Fragster
гуру
22.01.13
✎
14:58
|
лдя преобразования ключа в хэшиндекс
|
|||
34
Fragster
гуру
22.01.13
✎
14:59
|
Размер = 10000;
Поисков = 1000; Заполнение ключей: 156 Заполнение ТЗ: 1 218 Поиск в ТЗ: 141 Заполнение соответствия: 953 Поиск в соответствии: 187 Заполнение массива: 94 Поиск в массиве: 1 203 |
|||
35
jenny_tea
22.01.13
✎
16:38
|
На самом деле проблема следующая, на одной из закладой на форме есть Таблица Значений - Дерево с Данными СправочникСписок.ПодразделенияОрганизации , я дополняю этот список метками для выделения активных.
Когда открываешь эту закладку список прорисовывается в районе 5 секунд, в серверной базе (в файловой локальной меньше секунды) я и подумала что дело в том что при Получении данных ищу из ТЗ в которой храню Подразделения и метки. а Замер производительности дал мне что больше всего времени вообще другая хрень какая-то занимает из не моего модуля которую я не использовала, но видимо привязанная к Подразделениям, причем все последующие действия пометки или скоки вниз вверх по подразделениям делаются моментально |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |