SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Быстродействие UDR
Быстродействие UDR [сообщение #3568] Fri, 27 October 2023 15:16 Переход к следующему сообщению
ahmed_sultanov в настоящее время не в онлайне  ahmed_sultanov
Сообщений: 8
Зарегистрирован: October 2023
Junior Member
Здравствуйте, господа.
В рамках перехода на FB4 переписываем старые UDF на UDR.
Руководствуемся великолепным материалом Дениса Симонова "Написание UDR Firebird на Pascal".

Но есть проблема - строго все получившиеся UDR работают 2-2,5 раза медленнее чем исходные UDF.
При том что содержательная часть (собственно тот код который был в теле старой udf-функции, а теперь переехал в метод Execute(AStatus: IStatus; AContext: IExternalContext; AInMsg, AOutMsg: Pointer);
как правило не меняется.

Нет ли у кого-нибудь положительного опыта ускорения UDR? Является ли их значимо меньшее быстродействие по сравнению с UDF известной проблемой?
Re: Быстродействие UDR [сообщение #3569 является ответом на сообщение #3568] Fri, 27 October 2023 15:49 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 357
Зарегистрирован: August 2022
Senior Member
ahmed_sultanov писал(а) Fri, 27 October 2023 15:16
Но есть проблема - строго все получившиеся UDR работают 2-2,5 раза медленнее чем исходные UDF.
А можно конкретнее, с числами ? Ибо лишние 1-2 мс на 100К вызовов не тянет на "медленно".
Re: Быстродействие UDR [сообщение #3570 является ответом на сообщение #3569] Fri, 27 October 2023 16:05 Переход к предыдущему сообщениюПереход к следующему сообщению
ahmed_sultanov в настоящее время не в онлайне  ahmed_sultanov
Сообщений: 8
Зарегистрирован: October 2023
Junior Member
Я же не говорю - "медленно". Я говорю - "медленнее". Но - значимо, 2-2.5 раза.
Например: есть функция, которая обрабатывает число (dp) и конвертирует его в строку в каком-то формате (пробелы, разделители разрядов, округление и т.п.)
Суть этих преобразований в UDF и UDR одинаковая.
Делаем контрольную процедуру, обрабатываем миллион чисел.
Старая UDF - 7 с
Новая UDR - 18 с
Re: Быстродействие UDR [сообщение #3571 является ответом на сообщение #3570] Fri, 27 October 2023 16:32 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
Больше посредников, больше проверок. У вас очень быстрые функции, сравнимые по длительности с накладными расходами. Если вес упаковки больше веса товара, имеет смысл задуматься о том, не засунуть ли в эту упаковку больше единиц товара. Но это не всегда удобно, ясен пень.
Re: Быстродействие UDR [сообщение #3572 является ответом на сообщение #3568] Fri, 27 October 2023 23:12 Переход к предыдущему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Это известный факт. Если udr почти ничего не делает, то накладные расходы на проверки типов и ограничений входных и выходных параметров, а также преобразование форматов превосходят по времени полезную часть кода
Предыдущая тема: Как построить FK на PK?
Следующая тема: FB 3.0.7 повреждение БД
Переход к форуму:
  


Текущее время: Thu Nov 21 20:01:24 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01217 секунд