实体框架中的连接泄漏
Posted
技术标签:
【中文标题】实体框架中的连接泄漏【英文标题】:Connection leak in Entity Framework 【发布时间】:2016-06-16 13:43:35 【问题描述】:过去两天我一直在尝试解决以下错误:
超时。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。
据我检查,我们所有的DbContext
请求都用using
包装,但看起来它仍然没有被处理或其他什么。
有没有办法确定网络应用程序是否正在泄漏连接?还有什么我可以尝试的吗?!
我曾尝试增加 SQL Server 中的超时时间 + 将池大小从默认值 100 增加到 200 作为临时结果,但它没有帮助,这不是我想要的解决方案。
任何建议都会有所帮助。
【问题讨论】:
你在使用交易吗? 您是否正确处理了上下文? Danny dbcontext 是用 using 包装的,我还有什么需要做的吗?! 马龙,不,我们没有使用交易。 连接使用需要多长时间?如果有长时间运行的操作(例如 HTTP 调用),则连接将占用很长时间。 【参考方案1】:我想我有一个和你类似的案例。当我的代码未触及上下文时,我们的旧项目版本(仍在使用 EF4)会泄漏连接。创建了上下文,分配了一个新连接,但在 Dispose() 上,上下文似乎没有返回它的连接。
如果我只对未充分利用的上下文执行一个小查询(.First() 对任何随机表),情况会有所改善。
我的项目的一个更新的分支使用 EF6。该代码运行良好。
帮助我找到这一点的是 SQL Profiler。我也大致知道我的问题用户在做什么,所以我重复了他的步骤并密切关注 Profiler 的 SPID 列。然后我逐步浏览了部分代码,直到找到了我正在追逐的幽灵连接之一。
(我刚刚偶然发现了这个,所以我没有时间进一步调查)
【讨论】:
以上是关于实体框架中的连接泄漏的主要内容,如果未能解决你的问题,请参考以下文章
将 WCF 服务中使用的实体框架连接字符串包含到自托管控制台应用程序中的正确方法是啥?