|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Доброго дня. Сразу скажу, что я не спец по 1С и сильно не пинайте. Столкнулся с такой проблемой. Написал .dll для работы с сторонней БД. Из БД получаю в переменную (допустим Строка) 1С большую строку с разделителями (можно любые) 10 000 подстрок почти мгновенно ! Когда дело доходит до разборки на подстрок - тормоза жуткие ... Я понял, что все упирается в размер основной строки, чем больше - тем медленее Как это побороть ? Использую в 1С функцию: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 11:44 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Valeriu, Ну клюшки со строками работали весьма паршиво. Мы обходили это впихивая нужное в xml или dbf. С txt большого размера к сожалению тоже беда, хотя и не такая как в вашем варианте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 11:51 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Valeriu, Говнокод, он и в 7.7 говнокод. Попробуйте примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 12:31 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Bone serpent, Спасибо. Уже быстрее. Попробую счс с массивом, но знаю что и здесь просвета не видать... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 12:50 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Valeriu, Дальше можно вынести "тяжелую" операцию разбиения длинной строки на "слова" по разделителю за пределы цикла. Как я понимаю, строка длинная, разделителей много и функция Поле() вызывается много раз для одной и той же строки. И каждый раз происходит один и тот же СтрЗаменить(). Возможно выгоднее бы оказалось строку делить на "слова" один раз при чтении из базы. На многострочный текст. Или список значений. Тут уже тестировать надо, что выгоднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 20:31 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Bone serpent, мне кажется имеет большое значение как планируется эту строку потом использовать ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 22:49 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Bone serpent, Дальше можно вынести "тяжелую" операцию разбиения длинной строки на "слова" по разделителю за пределы цикла Так и сделал. Отдал эту функцию разбора .dll, сформировав одномерный массив. Потом на стороне 1С перебираю . 10 000 строк пару секунд. Красота... Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2016, 12:35 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
ValeriuBone serpent, Дальше можно вынести "тяжелую" операцию разбиения длинной строки на "слова" по разделителю за пределы цикла Так и сделал. Отдал эту функцию разбора .dll, сформировав одномерный массив. Потом на стороне 1С перебираю . 10 000 строк пару секунд. Красота... Спасибо.Тоесть отдельная dll выполняет математику? А код обращения к dll можно посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2016, 13:41 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Загрузка в список значений работает вполне сносно: СписокЗнач.ИзСтрокиСРазделителями("1,2,3,""Аа"",""Бб"""); ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2016, 13:44 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Что интересно . За пределами 1С в .dll (сделано на VB ) вывел и функцию разбора строки ... Результат меня ошеломил ! Работает как пуля ! Вот мне и обьясните почему так ? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Код: vbnet 1. 2. 3. 4.
А все это загрузить в ТЗ + дополнительный разбор подстрок - секунда ! Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2016, 15:21 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
неявная типизация + тормозной интерпритатор ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2016, 15:50 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2016, 17:30 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
в VB есть функция Split(строка, разделитель) = массив из строк Join(Массив, разделитель) = строка Зачем изобретать велосипед. Массивы самые быстрые и в vb и 1с Есть аналог Split в 1с - РазбитьСтрокуНаМассивПодтрок - как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 09:52 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Есть разница в передаче параметров в функции/процедуры В VB по-умолчанию ByVal( по значению - это как Знач 1с), а в 1с по-умолчанию ByRef(по ссылке) попробуйте: Функция Поле(Знач Стр = "", Знач Разделитель = " ", Знач Позиция = 0) Экспорт ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:44 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Gena Letchik, Попробуйте разобрать СТРОКУ 6 Мгб средствами 1с 7.7 Примерно 100 000 подстрок с разделителями "|" плюс разобрать подстроку - еще 10 полей с разделителем "\" И смотрите сколько это времени будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 11:38 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Valeriu, на VB это можно сделать проще, имхо Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 11:52 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Gena Letchik, Так разговор об этом шел с самого начало ... за пределами 1С Я ниже писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 12:04 |
|
1С 7.7 Разборка очень большой строки
|
|||
---|---|---|---|
#18+
Valeriu, ну )) так я вам и говорю, что можно еще ускорить VB-код и упростить, а так же и попробовать ускорить 1с передавая значение а не ссылку и определять тип параметра значением по-умолчанию. Насчет 7,7 не знаю, в общем, может сработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 12:47 |
|
|
start [/forum/topic.php?fid=28&msg=39183596&tid=1518809]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
131ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 498ms |
0 / 0 |