加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 是否有可能使用LINQ获取sql连接泄漏?

发布时间:2020-12-12 08:57:06 所属栏目:MsSql教程 来源:网络整理
导读:我相信在使用LINQ时不可能得到sql连接泄漏,但NumberOfReclaimedConnections的perfmon跟踪显示高数字,在高负载时,我们有时会得到“Timeout expired”等异常.在从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大
我相信在使用LINQ时不可能得到sql连接泄漏,但NumberOfReclaimedConnections的perfmon跟踪显示高数字,在高负载时,我们有时会得到“Timeout expired”等异常.在从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小“.

我们不在datacontexts上使用Dispose,因为我们使用了deferred loading.一些文章和博客文章告诉我,这应该不是问题.

我们有时会得到这些例外.但是,我们所做的每个linq查询都不能保持连接打开,那么我们就会有更多的异常.

编辑

该应用程序是一个WCF服务.

如果您查看Linq和大多数文章的文档,他们声称不需要Dispose来释放连接.他们声称DataCOntext只在需要的短时间内保持连接打开.

解决方法

当您的DataContext未被处理并保持活动状态时,关联的连接也将保持活动状态.数据库连接是非托管资源,必须正确处理所有非托管资源.

即使您使用延迟加载并且没有明确定义的范围,您仍应在逻辑工作单元结束时清理数据库连接.在ASP.NET应用程序中,最新的可能时刻是在请求处理结束时 – 在Globals.asax文件的Application_EndRequest方法中.在WCF服务中,应在每个服务方法调用结束时处理任何活动数据上下文.

这方面的文档含糊不清,虽然大部分时间都没有处理DataContext,但似乎确实存在从连接加载的数据保持连接本身存在的一些场景.确认在您的情况下发生这种情况的最简单方法是测试它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读