entity-framework - 如何停止或应对超时最大池大小达到异常?
问题描述
我已经设置了一个控制台 .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 在下一次时返回到池中提出请求?
我还假设我的使用代码是正确的,一旦离开使用它就会将资源释放回池中?
处理/减轻此异常的最佳方法是什么,是否有任何方法可以限制请求,直到池中有可用的请求?
解决方案
推荐阅读
- javascript - 如何将属性添加到具有可索引类型的接口
- html - Unix 命令输出到 HTML 文件
- java - spring 基本身份验证在 wildfly 8.2 中不起作用,而 jboss 与 7.1 一样工作正常
- javascript - Amcharts 3 饼图加载不正确
- jquery - jQuery 试图为“”的每个跨度添加 br 标记
- python - 如何使用`print`功能清除控制台行
- regex - 用于捕获两个双引号中的文本的正则表达式
- angular - 无法在 Nativescript Http 中获取 set-cookie 标头
- asp.net - 如何在用户单击 asp.net Web 应用程序时打开文件夹
- python - 需要帮助计算多个 pandas 列的唯一值