Dapper QueryAsync, вызывающий хранимую процедуру SQL Server, в 3 раза медленнее, чем SSMS (SP ~6 с, C# ~17–19 с).C#

Место общения программистов C#
Ответить
Anonymous
 Dapper QueryAsync, вызывающий хранимую процедуру SQL Server, в 3 раза медленнее, чем SSMS (SP ~6 с, C# ~17–19 с).

Сообщение Anonymous »

Код: Выделить всё

public async Task GetAllDynamicAsync(
string sp, DynamicParameters parms, CommandType commandType = CommandType.StoredProcedure)
{
using IDbConnection db = new SqlConnection(Connectionstring);
var rows = await db.QueryAsync(sp, parms, commandType: commandType);
return rows.Select(r => (IDictionary)r).ToList();
}
Я вызываю хранимую процедуру SQL Server через Dapper. Выполнение хранимой процедуры в SSMS занимает ~6 секунд, а вызов ее из C# — ~17–19 секунд. Судя по всему, задержка связана с вызовом QueryAsync.
Хранимая процедура возвращает динамические столбцы (подобные сводной таблице). Набор выходных столбцов зависит от параметров @dStartDate и @dEndDate (он строит столбцы дат на основе диапазона).
Я возвращаю динамический результат и привожу каждую строку к IDictionary, поскольку столбцы различаются.
Размер результата: ~ 8000 строк, ~ 25 столбцов.
Время выполнения SSMS (то же самое) params): ~6 секунд.
Время C# измерено только вокруг этой строки:

Код: Выделить всё

var rows = await db.QueryAsync(sp, parms, commandType: CommandType.StoredProcedure);
и это стабильно ~ 17–19 секунд.

Подробнее здесь: https://stackoverflow.com/questions/798 ... an-ssms-sp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»