实体框架中的连接泄漏

Bir*_*vel 5 c# memory-leaks entity-framework entity-framework-4

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

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

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

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

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

任何建议都会有所帮助。

9Ru*_*ne5 2

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

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

我项目的最新分支使用 EF6。该代码工作正常。

SQL Profiler 帮助我找到了这个问题。我也大致知道我的问题用户在做什么,因此我重复了他的步骤并密切关注 Profiler 的 SPID 列。然后我单步执行了部分代码,直到得到我正在寻找的幽灵连接之一。

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