|
Строка в миллион символов | ☑ | ||
---|---|---|---|---|
0
Fragster
модератор
26.07.13
✎
14:52
|
Запустил код:
А = ""; Для сч = 1 по 1000000 Цикл А = А + "ф"; КонецЦикла; Вот уже минут 5 работает... а 100000 за 10 секунд обработал. |
|||
1
H A D G E H O G s
26.07.13
✎
14:52
|
И?
|
|||
2
Maxus43
26.07.13
✎
14:53
|
(0) индикатор бы вывел на форму, или Состояние. Увидел бы с какого места начинает "тормозить"
|
|||
3
Жан Пердежон
26.07.13
✎
14:53
|
Продолжайте наблюдения
|
|||
4
Fragster
модератор
26.07.13
✎
14:53
|
(1) почитал http://habrahabr.ru/post/187602/, решил провести эксперименты в 1ске
|
|||
5
Fragster
модератор
26.07.13
✎
14:54
|
(3) Никогда не видел функцию преобразования массива в строку?
|
|||
6
Fragster
модератор
26.07.13
✎
14:54
|
интересно, сколько молотить будет
|
|||
7
Maxus43
26.07.13
✎
14:56
|
(6) в одну строку напиши цикл :)
|
|||
8
H A D G E H O G s
26.07.13
✎
14:57
|
(4) В статье хрень какая-то.
|
|||
9
Fragster
модератор
26.07.13
✎
15:01
|
(8) и все же 1 значениевструкувнутр, 1 сред, 3 стрзаменить, 1 цел, 1 лог10 и 100000 массив.добавить("ф") минимум в 20 раз быстрее (10 секунд против 0) . сейчас посмотрю на миллионе
|
|||
10
H A D G E H O G s
26.07.13
✎
15:03
|
(9) Тебе нужен Миллион Ф?
Сделай ее из ОписанияТипа |
|||
11
Fragster
модератор
26.07.13
✎
15:05
|
(10) у меня серийные номера с разделителем запятыми записаны на входе и должны быть так записаны на выходе.
а как с описанием типа? |
|||
12
zippygrill
26.07.13
✎
15:06
|
еще выполняется цикл?
|
|||
13
Очкарик
26.07.13
✎
15:06
|
а в миллиард слабо?
|
|||
14
H A D G E H O G s
26.07.13
✎
15:06
|
Описание=Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100000000,ДопустимаяДлина.Фиксированная));
СтрокаФ=Описание.ПривестиЗначение("Ф"); Сообщить(СтрДлина(СтрокаФ)); |
|||
15
Очкарик
26.07.13
✎
15:07
|
(14) долго выполняется?
|
|||
16
vde69
модератор
26.07.13
✎
15:08
|
(11) сразу размер строки задай при создании типа...
у тебя время уходит на выделение и перераспредление памяти. вообще динамические обьекты более одного сегмента памяти (65к) очень специфически себя ведут, именно для этого во всех языках есть понятие "поток" и работа с потоками а не с обьектом. |
|||
17
H A D G E H O G s
26.07.13
✎
15:08
|
(15) Че там выполняться. Идите учите информатику.
|
|||
18
H A D G E H O G s
26.07.13
✎
15:09
|
Вот, кстати, правильно.
Описание=Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100000000,ДопустимаяДлина.Фиксированная)); СтрокаФ=Описание.ПривестиЗначение("Ф"); СтрокаФ=СтрЗаменить(СтрокаФ," ","Ф"); Сообщить(СтрДлина(СтрокаФ)); |
|||
19
jsmith82
26.07.13
✎
15:14
|
это аналог strdup?
|
|||
20
Fragster
модератор
26.07.13
✎
15:15
|
(12) выполнился... результат:
Повторений = 1000000; ТекДата = ТекущаяДата(); Пока ТекДата = ТекущаяДата() Цикл КонецЦикла; А = ""; Для Сч = 1 по Повторений Цикл А = А + "ф"; КонецЦикла; Сообщить(ТекущаяДата() - ТекДата - 1); ТекДата = ТекущаяДата(); Пока ТекДата = ТекущаяДата() Цикл КонецЦикла; А = Новый Массив; Для Сч = 1 по Повторений Цикл А.Добавить("ф"); КонецЦикла; А = СтрЗаменить(СтрЗаменить(СтрЗаменить(Сред(ЗначениеВСтрокуВнутр(А), 54 + Цел(Log10(А.Количество()))), """}, |{""S"",""", ""),"""} |} |}",""),"""""",""""); Сообщить(ТекущаяДата() - ТекДата - 1); способ 1 - 1948 секунд способ 2 - 8 секунд |
|||
21
skunk
26.07.13
✎
15:16
|
1000 - менее секунды
10000 - около 2 секунд 100000 - 10 секунд |
|||
22
jsmith82
26.07.13
✎
15:16
|
хм, интересно
какое различие между стр = стр + "ф" и стр = стрзаменить(стр, " ", "Ф "); |
|||
23
jsmith82
26.07.13
✎
15:16
|
видимо, затраты на аллокацию памяти меньше
какие ещё могут быть причины |
|||
24
Fragster
модератор
26.07.13
✎
15:17
|
(14)(16) это замечательно, когда у нас заранее известна длина строки и оно заполнено повторяющимся символом, например в случае с серийниками (в самом запущенном случае - серийники еще и разной длины) это не так
|
|||
25
H A D G E H O G s
26.07.13
✎
15:19
|
(24) Я тебе в аську написал
|
|||
26
H A D G E H O G s
26.07.13
✎
15:20
|
Я кстати, непонял, зачем вам строка в 2 мегабайта.
|
|||
27
Fragster
модератор
26.07.13
✎
15:21
|
(26) это синтетический пример
|
|||
28
H A D G E H O G s
26.07.13
✎
15:23
|
пишите в файл через ЗаписьТекста, потом прочитайте и будет щасте.
|
|||
29
Dmitrith
26.07.13
✎
15:27
|
Вам в пятницу заняться больше нечем к концу рабочего дня?
|
|||
30
Живой Ископаемый
26.07.13
✎
15:28
|
2(29) ты так говоришь, как будто это что-то плохое.
|
|||
31
Kyon8
26.07.13
✎
15:29
|
Через ЗаписьXML должно быстрее работать.
|
|||
32
Fragster
модератор
26.07.13
✎
15:33
|
(28) да, так тоже быстрее
ТМП = ПолучитьИмяВременногоФайла(); Ф = Новый ЗаписьТекста(ТМП,,Символы.ПС); Для Сч = 1 по Повторений Цикл Ф.Записать("ф"); КонецЦикла; Ф.Закрыть(); Ф = Новый ЧтениеТекста(ТМП); А = Ф.Прочитать(); Ф.Закрыть(); УдалитьФайлы(ТМП); 7 секунд |
|||
33
Kyon8
26.07.13
✎
15:38
|
+(31) Провёл эксперимент
Процедура КнопкаВыполнитьНажатие(Кнопка) Сообщить("Время начала " + ТекущаяДата()); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); Для сч = 1 по 1000000 Цикл ЗаписьXML.ЗаписатьБезОбработки("ф"); КонецЦикла; СтрXML = ЗаписьXML.Закрыть(); Сообщить("Время окончания " + ТекущаяДата()); КонецПроцедуры Время начала 26.07.2013 15:39:30 Время окончания 26.07.2013 15:39:35 |
|||
34
Kyon8
26.07.13
✎
15:41
|
(32) Моё быстрее и файловую систему не трогает )
|
|||
35
H A D G E H O G s
26.07.13
✎
15:42
|
Вы круты.
|
|||
36
Fragster
модератор
26.07.13
✎
15:43
|
(34) на моем компе - 7 секунд с файлом и 9 с XML
|
|||
37
Живой Ископаемый
26.07.13
✎
15:43
|
||||
38
H A D G E H O G s
26.07.13
✎
15:45
|
СуперМассив=Новый Массив(1000000);
Для Счетчик=1 По 1000000 Цикл СуперМассив[Счетчик-1]="Ф"; КонецЦикла; 3 секунды |
|||
39
Живой Ископаемый
26.07.13
✎
15:46
|
http://screencast.com/t/np8lw7le8
тоже 1 секунда |
|||
40
Fragster
модератор
26.07.13
✎
15:46
|
(38) забыл преобразование в строку
|
|||
41
H A D G E H O G s
26.07.13
✎
15:47
|
(40) Тоесть?
|
|||
44
Живой Ископаемый
26.07.13
✎
15:47
|
2(41) нужна строка из миллиона символов а не массив с миллионом симоволов
|
|||
45
Fragster
модератор
26.07.13
✎
15:48
|
(41) у тебя на выходе массив. да, это ускоряет в 2 раза (у меня стабильно 5 секунд) после извращений, которые можно посмотреть в (20)
|
|||
46
H A D G E H O G s
26.07.13
✎
15:49
|
(45) Ладно, ладно.
|
|||
47
Fragster
модератор
26.07.13
✎
15:50
|
кстати
А = Новый Массив(Повторений); Для Сч = 1 по Повторений Цикл А[Сч-1] = "ф"; КонецЦикла; на секунду медленнее А = Новый Массив(Повторений); Для Сч = 0 по Повторений-1 Цикл А[Сч] = "ф"; КонецЦикла; |
|||
48
Kyon8
26.07.13
✎
15:51
|
(36) Запустил в консоли кода с отлкючённой отладкой также как в (37) - в результате и через ЗаписьФайла и через ЗаписьXML по 2 секунды, в прошлый раз похоже отладка мешала.
|
|||
49
Fragster
модератор
26.07.13
✎
15:53
|
может кто еще про v8: v8: Как сделать проще (СКД + пользовательский отбор) скажет?
|
|||
50
zippygrill
26.07.13
✎
16:19
|
(39) что за обработка в скрине? поюзать дашь? :)
|
|||
51
Fragster
модератор
26.07.13
✎
16:23
|
(50) это инструменты разработчика http://devtool1c.ucoz.ru/
|
|||
52
zippygrill
26.07.13
✎
16:24
|
(51) бесплатная?
|
|||
53
Fragster
модератор
26.07.13
✎
16:24
|
(52) lf
|
|||
54
arsik
гуру
26.07.13
✎
16:36
|
(51) В этой консоли можно временные таблицы посмотреть?
|
|||
55
Fragster
модератор
26.07.13
✎
16:36
|
(54) дам кучу чего можно, см. сайт
|
|||
56
arsik
гуру
26.07.13
✎
16:54
|
(55) Я скачал, посмотрел, но не нашел там как временные таблицы запроса посмотреть. Но я смотрел мобильную версию.
|
|||
57
also
26.07.13
✎
17:00
|
(56) запрос в дерево раскладываешь и смотришь
|
|||
58
arsik
гуру
26.07.13
✎
17:09
|
(57) Нет там такого - разложить запрос в дерево
|
|||
59
Живой Ископаемый
26.07.13
✎
17:13
|
Есть
|
|||
60
wPa
26.07.13
✎
17:14
|
интересным вы тут делом заняты )
|
|||
61
Fragster
модератор
26.07.13
✎
17:15
|
(60) тут уже почти все, мне теперь интересно по ссылке из (49)
|
|||
62
KRV
26.07.13
✎
17:16
|
ей богу - кругом пятница.
|
|||
63
Живой Ископаемый
26.07.13
✎
17:22
|
2(58) нужно говорить: "Я слепой" или "я не нашел", "я не увидел", а не "Там нету"
http://screencast.com/t/BolJy5cg9kv |
|||
64
AlexTim03
26.07.13
✎
17:34
|
Вот так:
а = "ф"; Для Сч = 1 По 20 Цикл а = а + а; КонецЦикла; а = Лев(а, 1000000); 5мс У кого скорость быстрее? |
|||
65
Fragster
модератор
26.07.13
✎
17:35
|
(64) хотя бы до 1000 итераций увеличь
|
|||
66
AlexTim03
26.07.13
✎
17:36
|
ЗАчем?
На выходе строка с миллионом значений |
|||
67
AlexTim03
26.07.13
✎
17:36
|
*миллионом символов
|
|||
68
Живой Ископаемый
26.07.13
✎
17:36
|
2(65) зачем?
|
|||
69
Fragster
модератор
26.07.13
✎
17:37
|
(66) хорошо, замени во всех примерах "Ф" на Строка(Сч).
|
|||
70
Fragster
модератор
26.07.13
✎
17:37
|
(68) чтобы автор увидел, как 1ска красиво падаетт
|
|||
71
AlexTim03
26.07.13
✎
17:41
|
(70)Ну да, на 1000 упадет. Но цель же - получить строку, а не положить мгновенно 1С, для этого и есть другие, еще более быстрые способы
|
|||
72
Fragster
модератор
26.07.13
✎
17:43
|
(71) тогда -> (69)
|
|||
73
anddro
26.07.13
✎
17:51
|
(72) а вот это уже совсем другая задача. В (0) что требовалось? 1 млн одинаковых символов и максимально быстро. В (64) эта задача решена.
|
|||
74
Fragster
модератор
26.07.13
✎
17:54
|
(73) задача в (11)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |