尝试从 .net core WebApi 在多个调用中并行执行多个存储过程

问题描述

我一直在尝试找到一种方法,可以从 .net 核心中的 Web API 并行执行 sql Server 中的存储过程。请求由 Angular 项目完成。

我的方法,在我的 webapi 中,在实际上使调用看起来像这样的最低级别:

public static async Task<List<dynamic>> CollectionFromSp(this DbContext dbContext,string SpName,List<sqlParameter> SpParameters)
{
    List<dynamic> result = new List<dynamic>();
    sqlConnection connection = new sqlConnection(dbContext.Database.GetDbConnection().ConnectionString);

    using (connection)
    {
        await connection.OpenAsync();

        sqlCommand cmd = new sqlCommand(SpName,connection);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddRange(SpParameters.ToArray());

        using (var dataReader = await cmd.ExecuteReaderAsync().ConfigureAwait(false))
        {
            while (await dataReader.ReadAsync())
            {
                var daTarow = GetDaTarow(dataReader);
                result.Add(daTarow);
            }
        }
    }

    return result;
}

这就是我从顶层调用它的方式:

public async Task<List<dynamic>> GetDataGastoTotalPorGrupo(DashboardParamsDTO parameters)
{
    var lparams = new List<sqlParameter>()
    {
        { new sqlParameter() { ParameterName = "@BankId",Value = parameters.BankId,sqlDbType = sqlDbType.SmallInt } },{ new sqlParameter() { ParameterName = "@ViewType",Value = parameters.ViewType,sqlDbType = sqlDbType.Bit } },{ new sqlParameter() { ParameterName = "@MonthId",Value = parameters.MonthId,sqlDbType = sqlDbType.Int } },{ new sqlParameter() { ParameterName = "@BrandId",Value = parameters.BrandId,{ new sqlParameter() { ParameterName = "@MonthIdFrom",Value = parameters.MonthIdFrom,{ new sqlParameter() { ParameterName = "@MonthIdTo",Value = parameters.MonthIdTo,sqlDbType = sqlDbType.Int } }
    };

    List<dynamic> list = await DynamicConnection.CollectionFromSp(CTBdc,"dbo.usp_ResumenMensual_ListaGastoTotalPorGrupo",lparams);
    CTBdc.Database.CloseConnection();
    return list;
}

我的 Angular 项目有六个请求,最后每个请求都使用第一个方法“CollectionFromSp”,但参数不同。

问题是,如果我从 Postman 中一一调用这六个请求中的每一个大约需要 6 或 8 秒,但是当我从我的 Angular 项目中同时调用所有六个请求时,大约需要 50 秒才能完成一切,就像它们是按顺序执行一样。在 Chrome DevTools 中,我可以看到最慢的一个需要更多时间。令我感到奇怪的是,在 sql Server Profile 中,我可以看到所有六个“RPC:Starting”事件同时出现。

那么,这是正常行为吗,我必须优化我的查询吗?也许我的数据库服务器不够强大,无法足够快地执行所有操作?还是我在后端或数据库中做错了什么,应该可以在 6 到 8 秒内执行所有操作,这需要最慢的 SP?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)