|
Функция СтрПолучитьСтроку | ☑ | ||
---|---|---|---|---|
0
kisskiss
30.01.13
✎
13:25
|
Анализ быстродействия кода показал, что 70% времени тратится на функцию СтрПолучитьСтроку(Текст,й); Можно ли эту функцию чем-то заменить, чтобы ускорить код ?
|
|||
1
ОбычныйЧеловек
30.01.13
✎
13:26
|
(0)Если весь код состоит только из этой строки то логично, что 70% времени тратится на нее.
|
|||
2
kisskiss
30.01.13
✎
13:27
|
В коде 1062 строки
|
|||
3
Ayvengo
30.01.13
✎
13:27
|
(0) а какая задача в целом?
|
|||
4
kosts
30.01.13
✎
13:30
|
Последовательное чтение текста
|
|||
5
kisskiss
30.01.13
✎
13:31
|
В целом - обработка упрощающая обновление конфигурации.
В данном случае задача стоит такая: берем код модуля и разбиваем его на функции, чтобы получилась таблица значений в формате Имя функции - код функции. СтрПолучитьСтроку используется для построчного прочтения кода |
|||
6
ОбычныйЧеловек
30.01.13
✎
13:31
|
(2) Вот ни о чем не говорит кол-во строк в коде...там может в первых 3х строчках возврат стоит с обработкой этой строки...Может у тебя в тексте миллион строк - вот долго и читает.
|
|||
7
Wobland
30.01.13
✎
13:32
|
регвыражения помогут найти функции
|
|||
8
Privalov
30.01.13
✎
13:32
|
(0) Дурной вопрос, может стоит переформулировать?
|
|||
9
Fragster
гуру
30.01.13
✎
13:32
|
(4) замени на чтение текста
|
|||
10
Ayvengo
30.01.13
✎
13:32
|
(5) Попробуй использовать Текстовый документ вместо Строки.
|
|||
11
Fragster
гуру
30.01.13
✎
13:32
|
чтениетекста
|
|||
12
Живой Ископаемый
30.01.13
✎
13:33
|
не используй объект Текст, используй ЧтениеТекста.
|
|||
13
kisskiss
30.01.13
✎
13:33
|
(6) Мне нужен код всего модуля, для последующего сравнения кода модуля в старой типовой конфигурации, новой и нашей на 50% нетиповой.
Строк действительно может быть очень много в модуле |
|||
14
kisskiss
30.01.13
✎
13:34
|
(8) нет
|
|||
15
Privalov
30.01.13
✎
13:34
|
(13) Нужен, берите, в чем вопрос?
|
|||
16
Ayvengo
30.01.13
✎
13:35
|
Хе, а девочки на мисте все с фотографиями ибо знают, что красивым поможем :D
|
|||
17
Fragster
гуру
30.01.13
✎
13:35
|
(13) поставь на поддержку, тогда там 3 конфы можно сравнить - конфигурация поставщика, конфигурация БД, загружаемая конфигурация
|
|||
18
kisskiss
30.01.13
✎
13:36
|
(10) (12) Думаете, что работа с файлами будет быстрее чем работа со строкой?
|
|||
19
Ayvengo
30.01.13
✎
13:37
|
(18) а зачем файл?:)
|
|||
20
kisskiss
30.01.13
✎
13:37
|
(17) нельзя на поддержку - 50% нетипового кода и редактируется с сохранением поддержки
|
|||
21
Живой Ископаемый
30.01.13
✎
13:37
|
2(18) Тетка, мы не думаем. мы пробуем и засекаем. И вам рекомендуем.
|
|||
22
Fragster
гуру
30.01.13
✎
13:37
|
(21) а чО тетка? вполне себе симпатичная девушка на фото...
|
|||
23
Maxus43
30.01.13
✎
13:38
|
(21) девушка уж тогда)
|
|||
24
Живой Ископаемый
30.01.13
✎
13:38
|
2(22) все Недядьки - этот тетки
|
|||
25
mrParadox
30.01.13
✎
13:40
|
(21) Ухахахаха, 5 балов
|
|||
26
kisskiss
30.01.13
✎
13:40
|
(21) ЧтениеТекста не пойдет, ибо потом опять чтение данного текста идет как при работе со строкой. В Хелпе написан пример:
Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Сообщить(Стр); Стр = Текст.ПрочитатьСтроку(); КонецЦикла; Так что это тоже самое, только вид сбоку :) |
|||
27
Maxus43
30.01.13
✎
13:40
|
"некоторые дяденьки иногда совершают ошибку и спят с чужими тетеньками , у которых между прочим тоже есть свои дяденьки , но пока их тетеньки спят с другими дяденьками , эти дяденьки спят с чужими тетеньками" (с)
|
|||
28
Fragster
гуру
30.01.13
✎
13:40
|
(26) нет, там будет последовательное чтение, а СтрПолучитьСтроку - прыгает по индексу
|
|||
29
Ayvengo
30.01.13
✎
13:41
|
(26) наивненькая :)
|
|||
30
kisskiss
30.01.13
✎
13:42
|
(29) в смысле ?
|
|||
31
Живой Ископаемый
30.01.13
✎
13:42
|
2(26) Понятно, то есть на форум пришла не спрашивать и пробовать, а умничать и отвергать советы.
|
|||
32
Живой Ископаемый
30.01.13
✎
13:43
|
2(30) В смысл, чтобы делать подобные заключения, нужно пробовать. А если не пробовать и делать подобные заключения - уподобляться тупой дуре.
|
|||
33
Maxus43
30.01.13
✎
13:44
|
агрессивный какой ископаемый сёдня
|
|||
34
Ayvengo
30.01.13
✎
13:44
|
(30) СтрПолучитьСтроку и ПрочитатьСтроку() разные функции работают с разными объектами, что уже должно навести на мысль, что работают по другому. Пробуй, заечка :) Потом расскажешь. Не попробовал не получишь результата ;)
|
|||
35
mrParadox
30.01.13
✎
13:44
|
Женоненавистник
|
|||
36
ОбычныйЧеловек
30.01.13
✎
13:44
|
(5) А каким образом получили ТЗ? (просто интересно).Ну допустим ТЗ есть - потом ее в текст пишите, что ли? а потом обратно из текста читаете?
|
|||
37
Живой Ископаемый
30.01.13
✎
13:46
|
2(33,35) почему? я ведь никого не называю тупой дурой.
|
|||
38
Живой Ископаемый
30.01.13
✎
13:47
|
Сейчас у ТС есть выбор. или попробовать, или оставаться в позе.
|
|||
39
GANR
30.01.13
✎
13:53
|
(0) Может помогут функции работы со строками Найти, СтрЗаменить и Сред ???
|
|||
40
GANR
30.01.13
✎
13:54
|
Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI);
Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Сообщить(Стр); Стр = Текст.ПрочитатьСтроку(); КонецЦикла; |
|||
41
kisskiss
30.01.13
✎
13:56
|
(32)(34) Погодите, пробую замерить время с ПрочитатьСтроку()...
|
|||
42
Живой Ископаемый
30.01.13
✎
13:56
|
2(40) Зачем прочитать строку? почему не Прочитать()?
|
|||
43
GANR
30.01.13
✎
13:57
|
(42) Тьху-ё кривой пример из справки
Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI); Стр = Текст.Прочитать(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Сообщить(Стр); Стр = Текст.Прочитать(); КонецЦикла; |
|||
44
GANR
30.01.13
✎
13:58
|
(41) Смотри (43)
|
|||
45
Живой Ископаемый
30.01.13
✎
13:58
|
2(43) тоже кривой
|
|||
46
GANR
30.01.13
✎
13:59
|
А нееееет... Текст.Прочитать() либо до прямо указанной позиции, либо до конца файла читает - поэтому (40)
|
|||
47
Ayvengo
30.01.13
✎
14:00
|
Ребята, а нафига вообще файл какой-то использовать? =\
|
|||
48
GANR
30.01.13
✎
14:01
|
(47) Потому что нет функции, которая последовательно считывает строку из оперативы
|
|||
49
Ayvengo
30.01.13
✎
14:02
|
(48) на, пробуй https://www.dropbox.com/s/2k6zdbvwjc5bkku/СравнениеЧтенияСтроки.epf специально для вас сделал :)
|
|||
50
Ayvengo
30.01.13
✎
14:03
|
СтрокаТекста = ПолучитьСтрокуТекста();
Если мы работает со строкой, то работает ппц долго. Если с ТД, выполняется моментально. Проверял на 18т строк. |
|||
51
Sammo
30.01.13
✎
14:08
|
Быстрее всего с текстом работать через ЧтениеТекста. Если последовательное чтение строк устраивает.
+ самый экономичный вариант по памяти. |
|||
52
GANR
30.01.13
✎
14:09
|
(0)(50) С тектовым документом дает выигрыш в 400 раз при чтении строки.
|
|||
53
kisskiss
30.01.13
✎
14:10
|
Все..готово... вместо 70% теперь сократилось до 1% (картинко: http://pikucha.ru/ia4T0). Ускорение явно чуствуется. Всем спасибо
(48) спасибо за обработку пы сы: классную строку ты в ней написал :) |
|||
54
kisskiss
30.01.13
✎
14:11
|
Скобка к адресу присоединилась:( вот корректный адрес:
http://pikucha.ru/ia4T0 |
|||
55
Ayvengo
30.01.13
✎
14:13
|
(53) всегда пожалуйста ;)
|
|||
56
GANR
30.01.13
✎
14:27
|
Кстати, через файл по скорости то же самое получается, что и через текстовый документ. Это так, к слову ;).
&НаКлиенте Процедура Команда1(Команда) // СтрПолучитьСтроку СтрокаТекста = ПолучитьСтрокуТекста(); ЧислоСтрок = СтрЧислоСтрок(СтрокаТекста); Счетчик = 1; Сообщить("Работа со строкой начата:"); Сообщить(ТекущаяДата()); Пока Счетчик <= ЧислоСтрок Цикл Значение = СтрПолучитьСтроку(СтрокаТекста, Счетчик); Счетчик = Счетчик + 1; КонецЦикла; Сообщить(ТекущаяДата()); // ТекстовыйДокумент ТД = Новый ТекстовыйДокумент; Сообщить("Работа с текстовым документов начата:"); Сообщить(ТекущаяДата()); ТД.УстановитьТекст(СтрокаТекста); ЧислоСтрок = ТД.КоличествоСтрок(); Счетчик = 1; Пока Счетчик <= ЧислоСтрок Цикл Значение = ТД.ПолучитьСтроку(Счетчик); Счетчик = Счетчик + 1; КонецЦикла; Сообщить(ТекущаяДата()); // через файл Текст = Новый ЗаписьТекста("D:\win.txt", КодировкаТекста.ANSI); Сообщить("Работа с файлом начата:"); Сообщить(ТекущаяДата()); Текст.Записать(СтрокаТекста); Текст.Закрыть(); Текст = Новый ЧтениеТекста("D:\win.txt", КодировкаТекста.ANSI); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Стр = Текст.ПрочитатьСтроку(); КонецЦикла; Текст.Закрыть(); Сообщить(ТекущаяДата()); КонецПроцедуры |
|||
57
Ayvengo
30.01.13
✎
14:27
|
(56) только нужно файл создавать, лишнее действие ;)
|
|||
58
Ayvengo
30.01.13
✎
14:28
|
Вдруг прав нет или еще какие-то проблемы. Хотя во временный каталог без проблем можно. НО зачем вообще что-то сохранять где-то ;)
|
|||
59
Широкий
30.01.13
✎
14:30
|
(0)Регулярки предлагать?
|
|||
60
GANR
30.01.13
✎
14:31
|
(57) Ну да. (58) Может дать выигрыш в оперативной памяти если тект ОЧЕНЬ большой.
|
|||
61
Fragster
гуру
30.01.13
✎
14:31
|
(58) ну, мне почему-то кажется, что в контексте анализа текстов модулей - они и так предварительно были выгружены в файл...
|
|||
62
GANR
30.01.13
✎
14:32
|
+(60) Хотя не факт - мы не знаем как ТекстовыйДокумент и ЧтениеТекста используют ресурсы.
|
|||
63
GANR
30.01.13
✎
14:33
|
(61) Тоже может быть
|
|||
64
Широкий
30.01.13
✎
14:33
|
(60) ТекстовыйДокумент читается файл послностью - соответственно оперативки сжигает..
Чтение читает файлик последовательно |
|||
65
GANR
30.01.13
✎
14:34
|
(64) Так ДОЛЖНО быть, но как это в платформе сделано?
|
|||
66
Ayvengo
30.01.13
✎
14:34
|
(63) сделай в (56) ПолучитьСтрокуТекста и там 100т строк ;)
|
|||
67
Sammo
30.01.13
✎
14:36
|
(62) Текстовый документ - это объект в памяти. Чтение текста - это fso
попробуй загрузить текстовый файлик в сотню мегабайт через текстовый документ - поймешь разницу :) |
|||
68
acsent
30.01.13
✎
14:41
|
сколько раз выполняется данная функция для модуля из 100 строк (ну допустим 5 функций)?
|
|||
69
GANR
30.01.13
✎
14:42
|
(66) То же самое, вот только Счетчик = Счетчик + 1 с текстовым документом увеличивает время в 1,5 раза ;)
(67) Если так - то хвала Аллаху. А то при выводе картинок в табличный документ с последующим его закрытием эти картинки так и остаются висеть в памяти, к примеру. Далеко не всё так рационально в платформе. |
|||
70
GANR
30.01.13
✎
14:44
|
(68) 100 строк - не показатель
|
|||
71
acsent
30.01.13
✎
14:46
|
(70) это для прикидки на опитмальность алгоритма. вдруг он 10 тыщ раз вызывается
|
|||
72
Ayvengo
30.01.13
✎
14:52
|
(68) 100т = 100 тысяч ;) или 1млн попробуй :) Хотя я таких модулей в 1Ске не видел на млн строк :)
|
|||
73
GANR
30.01.13
✎
15:05
|
(72) С файлом быстрее. Кстати, в (69) я ошибся - текстовую строку неправильно расфлудил.
|
|||
74
GANR
30.01.13
✎
15:07
|
(72) Конфигуратор повестися :)
|
|||
75
Ayvengo
30.01.13
✎
15:09
|
(69) сделай Для Счетчик = 1 По КоличествоСтрок Цикл :)
|
|||
76
Fragster
гуру
30.01.13
✎
15:10
|
конструкция вида Переменная = Переменная + Значение очень неоптимальна с точки зрения микрооптимизаций, особенно когда идет работа со строками. для чисел можно ускорить если сделать переменную "типизированной", например добавив переменную в реквизиты формы или обработки
|
|||
77
Fragster
гуру
30.01.13
✎
15:11
|
(76) естественно, речь про циклы во много итераций
|
|||
78
Eugene_life
30.01.13
✎
15:12
|
ТС уже удалилась, а возбужденные 1С-ники еще долго гудели и сыпали терминами...
|
|||
79
GANR
30.01.13
✎
15:21
|
(75) 500т строк. 30 секунд ТекстовыйДокумент против ЧтениеТекста
http://files.mail.ru/3F50DF7F93664F778255E1FE0D4575E3 |
|||
80
GANR
30.01.13
✎
15:21
|
30 против 3
|
|||
81
GANR
30.01.13
✎
15:32
|
||||
82
Ayvengo
30.01.13
✎
15:36
|
Работа с текстовым документов начата:
30.01.2013 15:32:35 - начало 30.01.2013 15:32:52 - окончание Работа с файлом начата: 30.01.2013 15:32:52 - начало (запись) 30.01.2013 15:32:52 - начало (обработки) 30.01.2013 15:32:56 - окончание Да, второй вариант интереснее по скорости, но для очень больших размеров текста. Для небольших 10000 строк, не видно особой разницы ;) Что не скажешь о СтрПолучитьСтроку - работает всегда медленно :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |