gpt4 book ai didi

.net - 是否有可能使用LINQ导致SQL连接泄漏?

转载 作者:行者123 更新时间:2023-12-04 13:30:08 26 4
gpt4 key购买 nike

我相信使用LINQ时不可能出现sql连接泄漏,但是对NumberOfReclaimedConnections进行perfmon跟踪显示了一个很高的数目,在高负载下,有时我们会遇到类似“超时过期。在从池中获取连接之前,超时时间已经过去了。这可能是因为所有池化连接都在使用中,并且达到了最大池大小”。

由于我们使用了延迟加载,因此我们不对数据上下文使用Dispose。几篇文章和博客文章告诉我这应该不是问题。

有时候我们还是会得到这些异常(exception)。但是,并非所有的linq查询都会保持连接打开,那么我们将有更多的异常(exception)情况。

已编辑

该应用程序是WCF服务。

如果您查看Linq的文档和大多数文章,则他们声称释放释放连接不是必需的。他们声称,DataCOntext仅在需要连接的短时间内保持打开状态。

最佳答案

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

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

有关此文档的说明并不明确,尽管在大多数情况下,您可以不用处理DataContext而摆脱困境,但在某些情况下,从连接加载的数据确实会使连接本身保持 Activity 状态。确认是否发生这种情况的最简单方法是对其进行测试。

关于.net - 是否有可能使用LINQ导致SQL连接泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/780447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com