![]() |
|
Что быстрее будет работать? | ☑ | ||
---|---|---|---|---|
0
mzelensky
18.12.13
✎
08:03
|
Собственно что быстрее и качественней отработает:
Если Метаданные.Документы.Найти( Объект.Метаданные().имя ) <> Неопределено тогда или Если Метаданные.Документы.Содержит( Объект.Метаданные() ) <> Неопределено тогда |
|||
1
Klesk666
18.12.13
✎
08:04
|
сделай в цикле - и замер производительности
|
|||
2
Wobland
18.12.13
✎
08:04
|
(1) а мы тут для чего?
|
|||
3
1Сергей
18.12.13
✎
08:04
|
(2) Чтобы сделать ставки
|
|||
4
Wobland
18.12.13
✎
08:06
|
Один англичанин все время проигрывал деньги на скачках. И однажды .он наконец понял, что нужно сделать, чтобы взять крупный выигрыш. Он не играл шесть лет. За шесть лет скопил шесть тысяч фунтов стерлингов. И через шесть лет шестого числа шестого месяца в день больших скачек в Лондоне он встал в шесть часов утра, специально вызвал такси с номером 66-66, приехал на ипподром, дал шесть шиллингов на чай таксисту, пошел в шестую кассу, и все шесть тысяч фунтов стерлингов поставил на шестой заезд на шестую лошадь. И лошадь пришла шестой.
|
|||
5
1Сергей
18.12.13
✎
08:12
|
Однажды, старый еврей 30 лет молился б-гу и просил ниспослать ему выигрышь в лотерею. И, наконец, б-г не выдержал и говорит еврею "Ну, купи уже лотерейный билет, блеать!"
|
|||
6
kosts
18.12.13
✎
08:18
|
(0) А не всё ли равно? У тебя в цикле миллион раз будет выполнятся?
|
|||
7
mzelensky
18.12.13
✎
08:22
|
(6) Достаточно часто вызывается.
Даи просто интересно |
|||
8
mzelensky
18.12.13
✎
08:25
|
И кстати .а есть более универсальный метод определения типа объекта?
Допустим моя переменная "Объект" может быть абсолютно любого типа (строка, число, ссылка на справочник, ссылка на док и так далее). Как провельней получить полный тип данных объекта?? Т.е. если "Объект" - это ссылка на док "Док1", то должно получиться "Документ.Док1" |
|||
9
1Сергей
18.12.13
✎
08:25
|
(8) Тип(Объект)
|
|||
10
skunk
18.12.13
✎
08:26
|
жесть
|
|||
11
vde69
модератор
18.12.13
✎
08:27
|
(7)
1. не = будет быстрее чем <> 2. содержит возвращает булево, по этому конструкция Если Метаданные.Документы.Содержит(Объект.Метаданные())тогда будет немного быстрее чем Если не Метаданные.Документы.Найти( Объект.Метаданные().имя ) = Неопределено тогда |
|||
12
mzelensky
18.12.13
✎
08:28
|
(9) Ты наверное хотел сказать "ТипЗНЧ(Объект)" -
Это в 8.1 прокатывает .а в 8.2 нифига он вернет просто "Док1" |
|||
13
mzelensky
18.12.13
✎
08:28
|
(10) Что жесть?
|
|||
14
Wobland
18.12.13
✎
08:28
|
(11) уверен про = и <>?
|
|||
15
Wobland
18.12.13
✎
08:28
|
+(14) панеслась..
|
|||
16
mzelensky
18.12.13
✎
08:29
|
(11) А почему "не = будет быстрее чем <>" ? Просто личные наблюдения или где-то документировано?
|
|||
17
mzelensky
18.12.13
✎
08:30
|
(15) Провокатор...
|
|||
18
Ranger_83
18.12.13
✎
08:30
|
А разница в несколько миллисекунд?
|
|||
19
Wobland
18.12.13
✎
08:31
|
(17) да не. искреннее считаю, что разницы нет
|
|||
20
Wobland
18.12.13
✎
08:31
|
а то бывают такие мнения, что <> - это две операции, к примеру
|
|||
21
Ranger_83
18.12.13
✎
08:33
|
(20) Карл и Маркс это два разных человека
|
|||
22
mzelensky
18.12.13
✎
08:34
|
(18) НУ даже просто теоретически интересно.
Уже делаю обработочку для замера. |
|||
23
Wobland
18.12.13
✎
08:34
|
(21) дада, как звали жену Бойля-Мариотта?
|
|||
24
vde69
модератор
18.12.13
✎
08:34
|
(19) небольшая разница есть, "не" и "=" унарный операции (самые быстрые), "<>" включает в себя обязательную проверку типа значения
|
|||
25
Wobland
18.12.13
✎
08:35
|
(24) ну, допустим, "=" - ни разу не унарная операция..
|
|||
26
jsmith82
18.12.13
✎
08:37
|
Если Метаданные.Документы.Найти( Об.Метаданные().имя ) <> Неопределено Тогда
0,000042 Если Метаданные.Документы.Содержит( Об.Метаданные() ) <> Неопределено Тогда 0,000002 То есть второй вариант быстрее в 21 раз |
|||
27
Pahomich
18.12.13
✎
08:37
|
А куда нам торопится? Быстрее работает - меньше оплата!
|
|||
28
НЕА123
18.12.13
✎
08:37
|
(22)
ежели теоретически, то 1 быстрее. т.к. обращение к Метаданные.Документы происходит в 1 раз, а во втором случае - 2 раза. практически - хз. |
|||
29
vde69
модератор
18.12.13
✎
08:38
|
ждем замеров...
хотя лично по мне - разница так мала, что ей можно принебреч... |
|||
30
НЕА123
18.12.13
✎
08:38
|
(28)
* первый-второй перепутал. |
|||
31
vde69
модератор
18.12.13
✎
08:40
|
(26) теперь поменяй местами строчки и повтори (что-бы исключить влияние кешей)
|
|||
32
Ranger_83
18.12.13
✎
08:40
|
(23) а полонез Огинского кто кто написал?
|
|||
33
jsmith82
18.12.13
✎
08:41
|
Если в 1000-кратном цикле
Если Метаданные.Документы.Найти( Об.Метаданные().имя ) <> Неопределено Тогда 0,013086 Если Метаданные.Документы.Содержит( Об.Метаданные() ) <> Неопределено Тогда 0,009117 То есть второй вариант быстрее в 1,43 раза |
|||
34
jsmith82
18.12.13
✎
08:43
|
(31) поменял строчки
Если в 1000-кратном цикле Если Метаданные.Документы.Найти( Об.Метаданные().имя ) <> Неопределено Тогда 0,012465 Если Метаданные.Документы.Содержит( Об.Метаданные() ) <> Неопределено Тогда 0,010558 То есть второй вариант быстрее в 1,18 раза |
|||
35
jsmith82
18.12.13
✎
08:44
|
Если без цикла, то в 2 раза теперь
|
|||
36
vde69
модератор
18.12.13
✎
08:44
|
(34) а теперь
Если не Метаданные.Документы.Найти( Об.Метаданные().имя ) = Неопределено Тогда |
|||
37
Ranger_83
18.12.13
✎
08:44
|
(34) выборка слишком мала.Может влиять загрузка самой системы
|
|||
38
jsmith82
18.12.13
✎
08:44
|
(35) Ха, я гоню, теперь медленнее в 2 раза!!!
|
|||
39
jsmith82
18.12.13
✎
08:45
|
(37 ) согласен
|
|||
40
Drac0
18.12.13
✎
08:45
|
Думаю, еще стоит учесть, что первый вариант не дает 100% гарантии правильного ответа. Например, может быть документ условно "ЗаказПокупателя" и отчет "ЗаказПокупателя". Результат будет некорректным.
|
|||
41
Ranger_83
18.12.13
✎
08:47
|
"ТС скучно набросил"(с)
|
|||
42
vde69
модератор
18.12.13
✎
08:47
|
(38) "честный" тест сделать не так просто :)
|
|||
43
Ranger_83
18.12.13
✎
08:49
|
Цикл побольше сделать и кэш прочистить предварительно
|
|||
44
jsmith82
18.12.13
✎
08:49
|
в общем сделал цикл на 100 тыс
строки переворачивал в обоих случаях коээфициент ~1,35 в пользу содержкит |
|||
45
jsmith82
18.12.13
✎
08:50
|
кэш почистил
всё то же 1,35 в пользу содержит |
|||
46
skunk
18.12.13
✎
08:50
|
||||
47
skunk
18.12.13
✎
08:51
|
замена омтДокумент.Имя на стрИмя с получением имени вне цикла на производительности почти не сказывается
|
|||
48
Ranger_83
18.12.13
✎
08:52
|
(44) какая СУБД?
|
|||
49
jsmith82
18.12.13
✎
08:52
|
(44) файловая у мну
|
|||
50
mzelensky
18.12.13
✎
09:06
|
В общем сделал замеры в цикле. Проверял 3 варианта:
1) Если Метаданные.Документы.Найти( Объект.Метаданные().имя ) <> Неопределено тогда 2) Если НЕ Метаданные.Документы.Найти( Объект.Метаданные().имя ) = Неопределено тогда 3) Если Метаданные.Документы.Содержит( Объект.Метаданные() ) <> Неопределено тогда По результатам замера получается ,что первый вариант быстрее, а именно вот так: Если Метаданные.Документы.Найти( Объект.Метаданные().имя ) <> Неопределено тогда |
|||
51
mzelensky
18.12.13
✎
09:09
|
база файловая на "1С:Предприятие 8.2 (8.2.18.109)"
Вот как тестил: Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. Для Сч=1 по 10000 цикл Если Объект<>неопределено тогда Если ТипЗнч(Объект)=Тип("Дата") тогда флТип="Дата"; ИначеЕсли ТипЗнч(Объект)=Тип("Число") тогда флТип="Число"; ИначеЕсли ТипЗнч(Объект)=Тип("строка") тогда флТип="строка"; ИначеЕсли ТипЗнч(Объект)=Тип("Булево") тогда флТип="Булево"; ИначеЕсли Метаданные.Документы.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="Документ."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.Справочники.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="Справочник."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.ПланыВидовХарактеристик.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="ПланВидовХарактеристик."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.ПланыВидовРасчета.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="ПланВидовРасчета."+Строка(Объект.Метаданные().имя) ; ИначеЕсли Метаданные.ПланыСчетов.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="ПланСчетов."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.БизнесПроцессы.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="БизнесПроцесс."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.Задачи.Найти( Объект.Метаданные().имя ) <> Неопределено тогда флТип="Задача."+ Строка(Объект.Метаданные().имя); КонецЕсли; КонецЕслИ; КонецЦикла; КонецПроцедуры Процедура ОсновныеДействияФормыДействие(Кнопка) // Вставить содержимое обработчика. Для Сч=1 по 10000 цикл Если Объект<>неопределено тогда Если ТипЗнч(Объект)=Тип("Дата") тогда флТип="Дата"; ИначеЕсли ТипЗнч(Объект)=Тип("Число") тогда флТип="Число"; ИначеЕсли ТипЗнч(Объект)=Тип("строка") тогда флТип="строка"; ИначеЕсли ТипЗнч(Объект)=Тип("Булево") тогда флТип="Булево"; ИначеЕсли НЕ Метаданные.Документы.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="Документ."+ Строка(Объект.Метаданные().имя); ИначеЕсли НЕ Метаданные.Справочники.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="Справочник."+ Строка(Объект.Метаданные().имя); ИначеЕсли НЕ Метаданные.ПланыВидовХарактеристик.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="ПланВидовХарактеристик."+ Строка(Объект.Метаданные().имя); ИначеЕсли НЕ Метаданные.ПланыВидовРасчета.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="ПланВидовРасчета."+Строка(Объект.Метаданные().имя) ; ИначеЕсли НЕ Метаданные.ПланыСчетов.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="ПланСчетов."+ Строка(Объект.Метаданные().имя); ИначеЕсли НЕ Метаданные.БизнесПроцессы.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="БизнесПроцесс."+ Строка(Объект.Метаданные().имя); ИначеЕсли НЕ Метаданные.Задачи.Найти( Объект.Метаданные().имя ) = Неопределено тогда флТип="Задача."+ Строка(Объект.Метаданные().имя); КонецЕсли; КонецЕслИ; КонецЦикла; КонецПроцедуры Процедура ОсновныеДействияФормыДействие1(Кнопка) // Вставить содержимое обработчика. Для Сч=1 по 10000 цикл Если Объект<>неопределено тогда Если ТипЗнч(Объект)=Тип("Дата") тогда флТип="Дата"; ИначеЕсли ТипЗнч(Объект)=Тип("Число") тогда флТип="Число"; ИначеЕсли ТипЗнч(Объект)=Тип("строка") тогда флТип="строка"; ИначеЕсли ТипЗнч(Объект)=Тип("Булево") тогда флТип="Булево"; ИначеЕсли Метаданные.Документы.Содержит( Объект.Метаданные() ) тогда флТип="Документ."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.Справочники.Содержит( Объект.Метаданные()) тогда флТип="Справочник."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит( Объект.Метаданные()) тогда флТип="ПланВидовХарактеристик."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит( Объект.Метаданные()) тогда флТип="ПланВидовРасчета."+Строка(Объект.Метаданные().имя) ; ИначеЕсли Метаданные.ПланыСчетов.Содержит( Объект.Метаданные()) тогда флТип="ПланСчетов."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.БизнесПроцессы.Содержит( Объект.Метаданные()) тогда флТип="БизнесПроцесс."+ Строка(Объект.Метаданные().имя); ИначеЕсли Метаданные.Задачи.Содержит( Объект.Метаданные()) тогда флТип="Задача."+ Строка(Объект.Метаданные().имя); КонецЕсли; КонецЕслИ; КонецЦикла; КонецПроцедуры Вот порядок цифр для разных типов "Объета" (каждая колонка это отдельный тип Объекта, каждая строка это порядковый номер процелдуры (метода)) 0,001428 0,001390 0,001517 0,011175 0,001429 0,001733 0,001122 0,011650 0,001595 0,001775 0,001544 0,011545 |
|||
52
mzelensky
18.12.13
✎
09:10
|
(51) + в базе я один, база на локальном компе, так что можно сказать ,что загрузка системы равномерная.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |