问题描述
我一直在尝试找到一种方法,可以从 .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 (将#修改为@)