【问题标题】:Connection leak in Entity Framework实体框架中的连接泄漏
【发布时间】:2016-06-16 13:43:35
【问题描述】:

过去两天我一直在尝试解决以下错误:

超时。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。

据我检查,我们所有的DbContext 请求都用using 包装,但看起来它仍然没有被处理或其他什么。

有没有办法确定网络应用程序是否正在泄漏连接?还有什么我可以尝试的吗?!

我曾尝试增加 SQL Server 中的超时时间 + 将池大小从默认值 100 增加到 200 作为临时结果,但它没有帮助,这不是我想要的解决方案。

任何建议都会有所帮助。

【问题讨论】:

  • 你在使用交易吗?
  • 您是否正确处理了上下文?
  • Danny dbcontext 是用 using 包装的,我还有什么需要做的吗?!
  • 马龙,不,我们没有使用交易。
  • 连接使用需要多长时间?如果有长时间运行的操作(例如 HTTP 调用),则连接将占用很长时间。

标签: c# entity-framework memory-leaks entity-framework-4


【解决方案1】:

我想我有一个和你类似的案例。当我的代码未触及上下文时,我们的旧项目版本(仍在使用 EF4)会泄漏连接。创建了上下文,分配了一个新连接,但在 Dispose() 上,上下文似乎没有返回它的连接。

如果我只对未充分利用的上下文执行一个小查询(.First() 对任何随机表),情况会有所改善。

我的项目的一个更新的分支使用 EF6。该代码运行良好。

帮助我找到这一点的是 SQL Profiler。我也大致知道我的问题用户在做什么,所以我重复了他的步骤并密切关注 Profiler 的 SPID 列。然后我逐步浏览了部分代码,直到找到了我正在追逐的幽灵连接之一。

(我刚刚偶然发现了这个,所以我没有时间进一步调查)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多