|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Добрый день всем Извините, не силен в C# от слова совсем. Когда-то нашел агрегат функцию CLR и по инструкции получилось ее скомпилировать и установить. Не особо погружался в код, но благо функция работает как надо. По большей части программирую на T-SQL... Волею судеб довелось столкнуться с 1С, где идентификаторы представлены в виде binary(16). Однако API от 1С интерпретирует их в виде GUID. Удалось найти функцию, которая очень извращенным способом собирает из binary(16) очень своеобразный GUID: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
таким образом айди вида: 0x81791CC1DEEA434311EBC3D76298209B , преобразовывается в: C11C7981-EADE-4343-11EB-C3D76298209B многочисленными сабстрингами режется на части, перетасовывается и получаем на выходе нужный нам GUID: 6298209B-C3D7-11EB-8179-1CC1DEEA4343 именно в таком виде его представляет 1С. Хотелось бы и остаться на таком результате. Однако, хочу попробовать используемые конверты и сабстринги передать на управление функции CLR, в надежде, что производительность будет выше. Прошу, помогите, пожалуйста, написать такую функцию на C#, чтобы я так же по инструкции смог бы ее скомпилировать. Простите, не имею возможности погружаться в особенности программирования на C#.. Видать я стар стал для изучения нового. Извините за наглость, но очень прошу помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 17:35 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник Хотелось бы и остаться на таком результате. Однако, хочу попробовать используемые конверты и сабстринги передать на управление функции CLR, в надежде, что производительность будет выше. Не парьтесь, не будет. Особенно если у вас 2019. Ну, или преобразуйте ее в табличную инлайн-функцию, толку больше будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 17:53 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster, У меня 2016й скуль Производительность ныне не высокая. Конвертация одного поля в таблице 1млн записей происходит примерно за 30 секунд. На первый взгляд похоже, что я с жиру бешусь. А по факту таких таблиц порядка 800, в каждой таблице от 4-6 таких полей, только в регистре сведений и накоплений. А в справочниках таких полей может быть уже от 10 до 25-30... И записей в таблицах 20-100 млн. В общем на промышленных масштабах уже начинаешь задумываться, где бы смазать ... Инлайн функция это что? Вряд ли мне поможет с моим ядром ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:00 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:01 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Ну и вызывать, соответственно: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:05 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster, Вы уверены, что это даст прирост производительности? Выглядит как-то странно, в части даже способа конвертации данных... Не представляю себе, как будет выглядеть справочник с 20ю полями, необходимыми сконвертировать, обвязанный 20ю табличными функциями... Может все же остановиться на скалярной функции? Но я попробую Ваше предложение, отпишусь о результате ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:06 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster, Попробовал, прирост производительности и правда есть и хороший. Выгоднее работает примерно на 60-70% Другое дело, что решение не очень изящное. Но как вариант очень достойный. К сожалению, не понимаю в чем профит. Те же конверты и сабстринги... Пока все еще в поиске решения на CLR. Но спасибо огромное ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:25 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник uaggster, У меня 2016й скуль Производительность ныне не высокая. Конвертация одного поля в таблице 1млн записей происходит примерно за 30 секунд. более чем уверен что у ТС проблема не в конвертации значений а получение данных строки. используется что нибудь вида Код: sql 1. 2. 3. 4.
где where blablabla нефига не попадает под существующие индексы или сам предикат поиска сложный. или еще хуже Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:34 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник, профит в том, что это инлайн-функция (прочитайте о них, наконец :-) ). Ее текст встраивается в текст запроса, и заменяется эквивалентным выражением, а не осуществляется однопоточно, отдельным вызовом. 2019 может встраивать и скалярные функции. Прирост на CLR именно на таком выражении возможно и будет, но будет незначительным. Т.к., во первых - преобразование несложное, а left-ы и прочие сабстринги работают очень быстро. И потом, в случае вызова CLR функции тоже добавится оверхед. Короче говоря, именно на таком выражении - особого выигрыша не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:37 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
felix_ff, Нет, вполне все индексировано и с предикатами нет проблем. Я делаю именно как Вы написали, но масштабнее Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:38 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster, У меня 2016й скуль ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:39 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник, ок, сравните приблизительно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
и покажите вывод output ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:40 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник К сожалению, не понимаю в чем профит. Сами по себе вычисления в первом посте (с substring) очень быстрые. никакой CLR не сравнится. Нужно либо сделать инлайн, как показал uaggster, либо использовать инлайн-скалярные функции (появились недавно, сам не пробовал), или делать это прямо в запросах (но да, паст-копи зло). Двоичник У меня 2016й скуль ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 18:51 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
felix_ff, Код: sql 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.
получил Время синтаксического анализа и компиляции SQL Server: время ЦП = 0 мс, истекшее время = 2 мс. Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 1 мс. Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 0 мс. Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 0 мс. Таблица "#tmp1_______________________________________________________________________________________________________________00000001258A". Число просмотров 0, логических чтений 1015, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0. Таблица "_InfoRg7879". Число просмотров 1, логических чтений 23, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0. Время работы SQL Server: Время ЦП = 79 мс, затраченное время = 78 мс. (затронуто строк: 1000) ------------------------- Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 0 мс. Таблица "_InfoRg7879". Число просмотров 1, логических чтений 23, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0. Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 2 мс. (затронуто строк: 1000) Время выполнения: 2021-10-29T20:15:06.6284756+03:00 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 20:16 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник, ну да, теперь убедили :) большого смысла переписывать данную конструкцию на CLR чисто имхо не имеет смысла если вы собираетесь ее использовать как скалярную фукнцию. там тоже тогда будет в плане куча compute scalar только подсчета в виде SQLCLR. я бы попробовал предложить сравнить инлайновый вариант tsql с табличной clr правда которая была бы не универсальной, а принимала предопределенное кол-во параметров и возвращала бы строку с тем же кол-вом колонок аля: SQLCLR Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
TSQL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
и в вашем случае использовать в виде Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
опять же не факт что будет быстрее обычной инлайновой tsql ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 23:38 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник Попробовал, прирост производительности и правда есть и хороший. Выгоднее работает примерно на 60-70% ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 10:49 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
alexeyvg Код: sql 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 10:50 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник, использование скалярной функции не только медленное, а еще и не допускает параллельной обработки в запросах, за исключением 2019 сервера и то с костылями. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 12:59 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Проще надо быть Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 13:03 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
aleks222 Проще надо быть Ну и в 5 и 20 раз соответственно по сравнению со скалярной ф-цией. Интересно, с чего такая разница, неужели пачка сабстрингов и пара лефт-райт, + 12 конкатенаций настолько тяжелы, по сравнению с вашим вариантом? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 16:20 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
Двоичник uaggster, У меня 2016й скуль х*юль Обычно у тех, кто мало соображает даже в SQL стоят 2016й скули на масдаях и пр. SQL Serve 2016 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 17:56 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
aleks222 uaggster Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Проще надо быть Код: sql 1. 2. 3. 4.
Ээээ... мопед не мой, я только разместил объяву! (с) И, кстати, в упор не понял, как это так получилось то. Если вариант ТС хоть как то понимаю (ну есть некий набор байт его как то для чего то миксуют) то здесь - в упор непонятно. Почему это два эквивалентных микса то? Это как то связано с механизмом хранения гуидов? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 18:57 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
alexeyvg aleks222 Проще надо быть Ну и в 5 и 20 раз соответственно по сравнению со скалярной ф-цией. Интересно, с чего такая разница, неужели пачка сабстрингов и пара лефт-райт, + 12 конкатенаций настолько тяжелы, по сравнению с вашим вариантом? Ну дык там 4 вызова примерно тех же самых функций вместо 20, как в варианте ТС. Понятно, что оно в 5 раз легче... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 19:00 |
|
CLR функция для 1С
|
|||
---|---|---|---|
#18+
uaggster Ну дык там 4 вызова примерно тех же самых функций вместо 20, как в варианте ТС. И вообще, интересно как то разложить операции по стоимости, может, тяжёлой являются конкретно какая то одна операция? uaggster Это как то связано с механизмом хранения гуидов? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 20:46 |
|
|
start [/forum/topic.php?fid=46&fpage=9&tid=1684074]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 158ms |
0 / 0 |