Имя: Пароль:
1C
1С v8
сравнение количества кода в Бух 3.0 и 7.7
0 vde69
 
30.01.13
10:42
интересно сравнить порядок количества строк кода в типовых конфигурациях,

меня интересует

бух 7.7 (в глобальнике примерно 70к, на вскидку думаю в целом примерно 200к)

Бух 3.0 а вот сколько в ней? хотя-бы на вскидку!
1 МихаилМ
 
30.01.13
10:47
gcomp
и
v8unpack Вам помогут
2 Maxus43
 
30.01.13
10:49
выгрузить файлы конфы и посчитать не предлагать?
3 Fragster
 
гуру
30.01.13
10:50
в нашей конфе 38мб кода, если выгрузить в текстовые файлы...
4 Fragster
 
гуру
30.01.13
10:50
говнокодапо большей части, к сожалению :(
5 vde69
 
30.01.13
10:51
зачем изобретать велосипед когда наверняка кто-то уже мерил?
6 DrShad
 
30.01.13
10:52
зачем мерить то что само по себе несоизмеримо?
7 Maxus43
 
30.01.13
10:55
сравнивать лошадей с утокносами по количеству мяса - исконно русская забава
8 Базис
 
naïve
30.01.13
10:57
Возьми машину с большой оперативкой и пересчитай символы ";".
Получишьь оценку снизу, методически неточную (в восьмёрке ещё бы "|" добавить, т.к. это тексты запросов. Но быстро.
9 Maxus43
 
30.01.13
11:01
(3) за 1 Мб кода - 2 Мб быдлокода дают!
10 vde69
 
30.01.13
11:10
(8) по данной методе примерно 800к строк
11 Maxus43
 
30.01.13
11:11
(10) отдельно считай Если Тогда Иначе, Попытка и т.д., ибо нет там ;
12 Maxus43
 
30.01.13
11:11
короче мильён. автор доволен?
13 Fragster
 
гуру
30.01.13
11:12
(9) да, у меня одну процедуру (!!!) получилось сократить с 5000 строк до 300 строк, распределенных по 4-5 процедурам...
14 vde69
 
30.01.13
11:17
7.7 примерно 170к
3.0 примерно 800к
15 Maxus43
 
30.01.13
11:17
(13) почти наверняка читаемость хуже стала) оптимизировать тоже надо осторожно)
16 Fragster
 
гуру
30.01.13
11:20
(15) нет, не стала. убрал копипасту, 9 уровней "если", и т.п. кое где заменил циклы на встроенные методы, поменяв наименование колонок во временных ТЗ применил ЗаполнитьЗначениеСвойств, в некоторых местах просто изменил 2 прохода данных на 1... много всего, это был именно рефакторинг, а не экстремальная оптимизация с борьбой за милисекунды...
17 ptiz
 
30.01.13
11:33
(16) А зачем?
18 Darklight
 
30.01.13
11:41
(15)Обычно это как раз приводит улучшению значимости и снижает бажность кода. Читайте Робера Мартина "Чистый код"
http://www.ozon.ru/context/detail/id/5011068/
19 Darklight
 
30.01.13
11:45
(18)Опечатка: Значимости->Читаемости
20 Maxus43
 
30.01.13
11:52
(18) рефакторинг улучшает, это понятно. а например "экстремальная оптимизация" - снижает на порядок, тем более в 1с в Управляемом приложении
21 Fragster
 
гуру
30.01.13
11:54
(17) надо было изменить поведение чуть-чуть... и пошло поехало...
22 Fragster
 
гуру
30.01.13
11:56
(20) у меня "экстремальная оптимизация" только в одном месте:

преобразование строки в массив:

Возврат ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить(Строка, """", """"""), Разделитель, """},{""S"",""") + """}}}");
23 Надсмотрщик
 
30.01.13
11:57
(14) Только в одной обработке "ДокументооборотСКонтролирующимиОрганами" - около 100к строк кода
24 Maxus43
 
30.01.13
12:08
(22) замечал что ЗначениеИзСтрокиВнутр работает нифига не быстро. От задачи конечно зависит, стандартная функция разложения строки в массив дольше? (ну или не стандартная)
25 Fragster
 
гуру
30.01.13
12:10
(24) дольше в разы на небольшом количестве итогового массива (до 10), и очень, очень сильно дольше, когда в результирующем массиве > 1000 элементов должно получиться
26 shurikvz
 
30.01.13
12:14
Ради интереса, а есть у кого-нибудь данные во сколько человеко-часов на текущий момент оценивается УПП, ну или Бух, ну или любая типовая конфа?
27 Maxus43
 
30.01.13
12:20
По замеру производительности - получение массива из внутреннего представления - в 2 раза дольше чем создание и заполнение массива с нуля

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   //Массив
   А = ПолучитьМассивА();    
   //ЗначениеИзСтрокиВнутр тот же массив
   Б = ПолучитьМассивБ();
   
КонецПроцедуры

Функция ПолучитьМассивА()
   
   А = Новый Массив();
   А.Добавить(1);
   А.Добавить(2);
   А.Добавить(3);
   А.Добавить(4);
   А.Добавить(5);
   А.Добавить(6);
   А.Добавить(7);
   А.Добавить(8);
   А.Добавить(9);
   А.Добавить(10);
   
   Возврат А;
   
КонецФункции

Функция ПолучитьМассивБ()
   
   Б = ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{10,{""N"",1},{""N"",2},{""N"",3},{""N"",4},{""N"",5},{""N"",6},{""N"",7},{""N"",8},{""N"",9},{""N"",10}}}");
   
   Возврат Б;
   
КонецФункции
28 Maxus43
 
30.01.13
12:21
(25) > (27) померял так для примера, чот наоборот получается
29 Fragster
 
гуру
30.01.13
12:23
(28) и где в ПолучитьМассивА() разбор строки "1,2,3,5,6,7,8,9,10" ?
30 pumbaEO
 
30.01.13
12:35
(0) все не читал, а в чем проблема? Посчитать?
31 Maxus43
 
30.01.13
12:55
(29) тут не про разбор, тут про создание массива по феншую, и получение массива из строки представления
32 Fragster
 
гуру
30.01.13
12:57
(31) я тебе говорю про преобразование строки в массив. т.е. есть строка с разделителями, надо из нее сделать массив. каноничный способ в цикле с поиском разделителя, лев и сред отсасывает конкретно.
33 Новиков
 
30.01.13
13:05
Коллега @RomanSun делал исследование некоторое на тему, похожую в (0).

Ознакомиться можно тут: http://infostart.ru/public/164960/
34 Darklight
 
30.01.13
13:19
(32)Всегда использовал СтрПолучитьСтроку(СтрЗаменить(Строка,МойРазделитель,Символы.ПС) - получает это существенно медленнее работает, чем (20)?
Если медленеее - то из-за чего, из-за длинных строк, большого числа разделяемых элементов, частых вызовов?
35 Reset
 
30.01.13
13:24
(27) Ща тест забабахаю с учетом (29), любопытно.
36 Fragster
 
гуру
30.01.13
13:33
(34) да
37 Fragster
 
гуру
30.01.13
13:34
(35) и с учетом (34), плз
38 Reset
 
30.01.13
13:41
Для одного элемента метод через массив быстрее

Для i=1 по 10000 цикл А = ПолучитьМассивА("1",",");   КонецЦикла;//0,125626
Для i=1 по 10000 цикл Б = ПолучитьМассивБ("1",","); КонецЦикла;//0,634728

Для 10 уже отстает

Для i=1 по 10000 цикл А = ПолучитьМассивА("1,2,3,4,5,6,7,8,9,10",",");   КонецЦикла;//0,837312
Для i=1 по 10000 цикл Б = ПолучитьМассивБ("1,2,3,4,5,6,7,8,9,10",","); КонецЦикла;//0,781007

Для 500 сильно отстает

Стр="";
Для i=1 по 500 цикл
   Стр=Стр+","+i;
КонецЦикла;
Стр=Сред(Стр,2);

Для i=1 по 10000 цикл А = ПолучитьМассивА(Стр,",");   КонецЦикла;//40,954549
Для i=1 по 10000 цикл Б = ПолучитьМассивБ(Стр,",");   КонецЦикла;//6,481307



Если записать текст функций в строку (что выгодно для метода с циклом), метод А ускоряется, но тенденция прежняя.


Функция ПолучитьМассивА(Знач Строка,Разделитель)
   
   А = Новый Массив();
   Пока Истина цикл
       ПозРазделителя=Найти(Строка,Разделитель);
       Если ПозРазделителя=0 тогда
           А.Добавить(Строка);
           Прервать;
       КонецЕсли;
       А.Добавить(Лев(Строка,ПозРазделителя));
       Строка=Сред(Строка,ПозРазделителя+1);
   КонецЦикла;
   
   Возврат А;
   
КонецФункции

Функция ПолучитьМассивБ(Знач Строка,Разделитель)
   
   ПозРазделителя=Найти(Строка,Разделитель);
   Размерность=СтрЧислоВхождений(Строка,Разделитель)+1;
   Строка="{""S"","""+СтрЗаменить(Строка,Разделитель,"""},{""S"",""");
   Б = ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{"+Формат(Размерность,"ЧГ=")+","+Строка+"""}}}");
   
   Возврат Б;
   
КонецФункции
39 Fragster
 
гуру
30.01.13
13:46
(38) размерность можно не считать, писать 0 туда
40 Fragster
 
гуру
30.01.13
13:47
Формат(Размерность,"ЧГ=") можно заменить на XMLСтрока, если очень хочется ее использовать
41 Reset
 
30.01.13
13:55
(37)

Если функцию А переписать с учетом(34)

Функция ПолучитьМассивА(Знач Строка,Разделитель)
   
   А = Новый Массив();
   Размерность=СтрЧислоВхождений(Строка,Разделитель)+1;
   Строка=СтрЗаменить(Строка,Разделитель,Символы.ПС);
   Для i=1 по Размерность цикл
       А.Добавить(СтрПолучитьСтроку(Строка,i));
   КонецЦикла;
   Возврат А;
КонецФункции

она работает быстрее на малой размерности, и медленней на "большой"
у меня получилось
0,174096  (увеличлось с 0,125626, логично, 1 лишяя операция)
0,583292 (уменьшилось с 0,837312)
71,013895 (увеличилось с 40,954549)
42 Reset
 
30.01.13
14:05
(39) Если писать размерность 0, то скорость возрастает на 40%-25% (при увеличении р-ра меньше)
43 Reset
 
30.01.13
14:06
В общем, эмпирически (25) подтверждается
44 Reset
 
30.01.13
14:07
Как я вам в роли негра-испытателя? :D
45 Fragster
 
гуру
30.01.13
14:12
(44) норм, главное, чтобы тебе нравилось
46 Maxus43
 
30.01.13
14:13
(44) мне больше понравится если в роли негра-работяги будешь. сделай за меня пару задачек, а то лень :)
47 Fragster
 
гуру
30.01.13
14:13
48 Darklight
 
30.01.13
14:29
(44)Респект Резету!
49 Darklight
 
30.01.13
14:29
7 бед - один Reset
50 Darklight
 
30.01.13
14:37
(44)Ну для чистоты эксперимента ещё и работу через ТекстовыйДокумент потестируй (в тех же условиях испытательного полигона) отсюда (47)