我已经建立了一个控制台.net核心应用程序(3.0.0 Preview3),并添加了一个链接到我的ef核心模型(2.2.4)的数据库上下文池,并构建了服务提供商
var serviceProvider = new ServiceCollection()
.AddDbContextPool<CorumClearDispenseContext>(options => options.UseSqlServer("Server=.;Database=*******;Trusted_Connection=True;"))
.BuildServiceProvider();
然后我循环10,000次并向数据库发出请求
IEnumerable<DataLookup> searchData = null;
using (var serviceScope = serviceProvider.CreateScope())
{
var myDBContext = serviceScope.ServiceProvider.GetService<MyDBContext>();
searchData = await myDBContext.DataLookup.Where(p => p.Description.Contains("test")).Skip(0).Take(100).AsNoTracking().ToListAsync();
}
return searchData ;
现在在运行此代码时,我总是遇到超时最大池大小达到异常的情况。为了清楚起见,数据库和控制台应用程序都在同一台计算机上。
当我说时,有人可以澄清我的理解是正确的。默认情况下,我的池大小应为128,并且我的请求正在全部使用它们,并且它们的完成速度不足以使dbcontext返回到池。下一次发出请求的时间是什么?
我还假定我的使用代码正确,并且一旦离开使用状态,它将把资源释放回池中?
处理/缓解此异常的最佳方法是什么,是否有任何方法可以限制请求,直到池中有可用请求为止?