|   |   | 
| 
 | что работает быстрее соответствие, список значений или таблица значений | ☑ | ||
|---|---|---|---|---|
| 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 секунд, в серверной базе (в файловой локальной меньше секунды) я и подумала что дело в том что при Получении данных ищу из ТЗ в которой храню Подразделения и метки. а Замер производительности дал мне что больше всего времени вообще другая хрень какая-то занимает из не моего модуля которую я не использовала, но видимо привязанная к Подразделениям, причем все последующие действия пометки или скоки вниз вверх по подразделениям делаются моментально | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |