首页 > 解决方案 > 如何停止或应对超时最大池大小达到异常?

问题描述

我已经设置了一个控制台 .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 在下一次时返回到池中提出请求?

我还假设我的使用代码是正确的,一旦离开使用它就会将资源释放回池中?

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

标签: entity-frameworkentity-framework-core

解决方案


推荐阅读