Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как оптимизировать код 1с v77 ? (число прочтений - 6743 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как оптимизировать код 1с v77 ?
Ответ #15 - 13. Апреля 2011 :: 10:26
Печать  
А выложите de1c77, та что на проекте автора, у меня не работает.
Печаль
ЗЫ: илю сюда Ёпрст-у в подарок
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #16 - 13. Апреля 2011 :: 10:28
Печать  
Artem N писал(а) 13. Апреля 2011 :: 10:23:
Да.

ну а тогда рассмотрим случай когда оба условных выражения истинны.
Что в этом случае будет быстрее
два если в каждом одно логическое сравнение
или одно Если с  двумя логическими сраввнениями и одной логической операцией И

Как бы по числу операций первый вариант из 0 предпочтительней
но не пересилит ли все это лишний оператор "Если"
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #17 - 13. Апреля 2011 :: 10:33
Печать  
Артур меня не понял, но натолкнул на такую проверку

Перем а,б;
а=0;
Если (а=1)И(б>0) Тогда
     Сообщить("!");
КонецЕсли;

Ошибка: "Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)"

Вывод: проверяется все выражение.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #18 - 13. Апреля 2011 :: 10:38
Печать  
Глубину поста (2) не осилил но из попытки осознания
появился еще один код

Код
Выбрать все
   Если А< 0 Тогда
   ИначеЕсли В = 1 Тогда
	// Двигаем регистр
   КонцЕсли; 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #19 - 13. Апреля 2011 :: 14:34
Печать  
Сделал тесты
1cv77 релиз 25

в тестах вариант #1 это первый код из 0
в тестах вариант #2 это второй код из 0
в тестах вариант #3 это код из 18
в тестах вариант #4 это код из 13
Прогонял заведомо ложное для двух условий (-1 , -1 )
и заведомо истинное для двух условий      ( 1 ,  1 )
число итераций 15,000,000
обработка прилагается
  

test_95______________________.ert ( 31 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #20 - 13. Апреля 2011 :: 14:35
Печать  
Результаты теста
условие не выполнено

Вариант №1 число циклов =  А1 = -1 Б1 = -1 Время = 21247
Вариант №1 число циклов =  А1 = -1 Б1 = -1 Время = 21246
Вариант №1 число циклов =  А1 = -1 Б1 = -1 Время = 21255
Вариант №2 число циклов =  А1 = -1 Б1 = -1 Время = 28262
Вариант №2 число циклов =  А1 = -1 Б1 = -1 Время = 28267
Вариант №2 число циклов =  А1 = -1 Б1 = -1 Время = 28246
Вариант №3 число циклов =  А1 = -1 Б1 = -1 Время = 21673
Вариант №3 число циклов =  А1 = -1 Б1 = -1 Время = 21670
Вариант №3 число циклов =  А1 = -1 Б1 = -1 Время = 21677
Вариант №4 число циклов =  А1 = -1 Б1 = -1 Время = 39114
Вариант №4 число циклов =  А1 = -1 Б1 = -1 Время = 39121
Вариант №4 число циклов =  А1 = -1 Б1 = -1 Время = 39079


условие выполнено
Вариант №1 число циклов =  А1 = 1 Б1 = 1 Время = 29201
Вариант №1 число циклов =  А1 = 1 Б1 = 1 Время = 29229
Вариант №1 число циклов =  А1 = 1 Б1 = 1 Время = 29202
Вариант №2 число циклов =  А1 = 1 Б1 = 1 Время = 28830
Вариант №2 число циклов =  А1 = 1 Б1 = 1 Время = 28806
Вариант №2 число циклов =  А1 = 1 Б1 = 1 Время = 28818
Вариант №3 число циклов =  А1 = 1 Б1 = 1 Время = 28324
Вариант №3 число циклов =  А1 = 1 Б1 = 1 Время = 28296
Вариант №3 число циклов =  А1 = 1 Б1 = 1 Время = 28326
Вариант №4 число циклов =  А1 = 1 Б1 = 1 Время = 37842
Вариант №4 число циклов =  А1 = 1 Б1 = 1 Время = 37828
Вариант №4 число циклов =  А1 = 1 Б1 = 1 Время = 37831


  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #21 - 13. Апреля 2011 :: 14:39
Печать  
Выводы <ЛочическийЕсли> проиграл остальным очень сильно.

Еще вывод Если более вероятно что условие чаще выдаст нет
то надо использовать вариант №1

Если более вероятно что оба условия выдают да
то надо использовать вариант №3
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: Как оптимизировать код 1с v77 ?
Ответ #22 - 20. Апреля 2011 :: 04:52
Печать  
В глубокой древности учебы, препод настоятельно рекомендовал выяснять максимальную  вероятность выполнения условия и ставить его первым....
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #23 - 20. Апреля 2011 :: 07:43
Печать  
nicolas писал(а) 20. Апреля 2011 :: 04:52:
В глубокой древности учебы, препод настоятельно рекомендовал выяснять максимальную  вероятность выполнения условия и ставить его первым....

ну такие вещи нельзя отрывать от реализаций языков и компиляторов.

в том же ci порядок выполнения строго не определен.
a() & b()


эта  же ветка показывает что если
есть два условия и первое условие очень вероянто ( более 90%)
то наиболее быстрый способ это через отрицание первого условия. (см пост 18)
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как оптимизировать код 1с v77 ?
Ответ #24 - 20. Апреля 2011 :: 15:21
Печать  
Artem N писал(а) 13. Апреля 2011 :: 09:07:
посмотреть в декомпиляторе de1c77

феерично...
а закладка Исходный код, что должна содержать? там пусто.

стесняюсь спросить, а чего покажет после кзк-2?
  
Наверх
ICQ  
IP записан
 
Artem N
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Местоположение: Киров
Зарегистрирован: 13. Апреля 2011
Re: Как оптимизировать код 1с v77 ?
Ответ #25 - 21. Апреля 2011 :: 05:57
Печать  
spock писал(а) 20. Апреля 2011 :: 15:21:
феерично...
а закладка Исходный код, что должна содержать? там пусто.

стесняюсь спросить, а чего покажет после кзк-2?

Закладка "Исходный код" устарела. А КЗК-2 не декомпилируется Улыбка Покажет лишь список функций.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Как оптимизировать код 1с v77 ?
Ответ #26 - 28. Апреля 2011 :: 05:28
Печать  
Дабы не создавать новую тему.

Что эффективнее:

1) Такая проверка на наличие реквизита шапки документа:
Код
Выбрать все
Если ПустоеЗначение(ИмяРеквизита) = 1 Тогда
	Возврат 0;
ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1 Тогда
	Возврат 1;
ИначеЕсли ПустоеЗначение(ВидДокумента) = 1 Тогда
	Возврат 0;
ИначеЕсли Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1 Тогда
	Возврат 1;
Иначе
	Возврат 0;
КонецЕсли;
 

(код уперт из стандартной конфы)

или же банально
Код
Выбрать все
Попытка Док.<ИмяРеквизита> = Значение; Исключение КонецПопытки; 



2) проверка существования колонки ТЗ
Код
Выбрать все
Попытка
	ТЗ.ПолучитьПараметрыКолонки(ИмяКолонки);
	Возврат 1;
Исключение
	Возврат 0;
КонецПопытки;
 



или же без эксепшенов:

Код
Выбрать все
Для й = 1 По ТЗ.КоличествоКолонок() Цикл
_ИмяКолонки = ТЗ.ПолучитьПараметрыКолонки(й);
Если нРег(_ИмяКолонки) = нРег(ИмяКолонки) Тогда
	Возврат 1;
КонецЕсли;
Возврат 0
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как оптимизировать код 1с v77 ?
Ответ #27 - 28. Апреля 2011 :: 05:59
Печать  
проверка существования колонки ТЗ:


Код
Выбрать все
Если ТЗ.ВидимостьКолонки(ИмяКолонки,1) = -1 Тогда
    Сообщить("а нету нихрена колонки с идентификатором "+ИмяКолонки);
Иначе
    Сообщить("я-я, есть унатуре");
КонецЕсли;    

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать