Не знал, куда написать, но решил, что это более подходит в раздел .NET.
В SqlServer, начиная с 2005, нам дали возможность загружать сборки платформы .net
Решил ранее использовавшиеся вызовы extended stored procedure перевести в эти сборки. На время перехода предполагается следующая конфигурация:SQL-хранимая процедура, дергающая сборку-"обвязку" на C#, которая в свою очередь путем dllimport использует методы unmanaged-кода на C++. И столкнулся с достаточно долгим переключением контекстов. Решил немножко изучить вопрос и написал несколько процедур. Выводы такие:
Без параметров — время переключения контекста SQL-CLR составило 40 мкс. Два параметра- 44,3 Десять параметров — 66,3 Двадцать параметров — 75,3 Двадцать параметров, из них 18 — output, то есть мы их инициализируем в CLR и при выводе конвертим обратно — 78,3 Если инициализировать строки не StringBuilder-ом, а пустой строкой, то получаем отсутствие разницы в последних двух случаях, то есть оба по 75.3.
То есть фактически мы получаем приблизительно линейную зависимость длительности переключения от количества параметров. Грустно.
Далее, в версию с 20-ю параметрами, из которых 18-out, был встроен вызов unmanaged-библиотеки, которая выполняла запись в лог и печатала там время выполнения своей операции. Получили 113 мкс при времени выполнения самой процедуры на C++ равном 8 мкс. Итого, на переключение контекста CLR- unmanaged C мы потратили еще 30 мкс.
Есть ли идеи по поводу "как ускорить переключение"?
Заранее спасибо.