如何停止或应对超时最大池大小已达到异常?

时间:2019-05-01 03:51:35

标签: entity-framework entity-framework-core

我已经建立了一个控制台.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返回到池。下一次发出请求的时间是什么?

我还假定我的使用代码正确,并且一旦离开使用状态,它将把资源释放回池中?

处理/缓解此异常的最佳方法是什么,是否有任何方法可以限制请求,直到池中有可用请求为止?

0 个答案:

没有答案