【问题标题】:Running out of DB connections using LINQ to SQL使用 LINQ to SQL 耗尽数据库连接
【发布时间】:2010-09-30 09:27:39
【问题描述】:

在开发一个相对简单的 Web 服务时,它获取帖子提供的数据并将其记录在数据库表中,我们收到此错误:

异常捕获:远程服务器返回错误:(500) Internal Server Er 要么。 堆栈跟踪:在 System.Net.HttpWebRequest.GetResponse()

在某些服务器上,但在其他服务器上没有。得到这个的是物理机,其他的是虚拟机,显然物理服务器要强大得多。

据我们所知,问题在于每次查询后数据库连接都没有释放回池中。我正在使用下面的使用模式:

                using (VoteDaoDataContext dao = new VoteDaoDataContext())
                {

                    dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip);
                    dao.SubmitChanges();
                    msg += "Thank you for your vote.";
                    dao.Dispose();
                }

我添加了 dao.Dispose() 调用以确保在方法完成时释放连接,但我不知道是否有必要。

我是否正确使用了这种模式?我还需要做些什么来确保连接正确返回到池中吗?

谢谢!

【问题讨论】:

  • 在 using 块内不需要 Dispose。是什么让您认为您的连接已用完?

标签: c# linq linq-to-sql connection pool


【解决方案1】:

您的诊断信息不够好。 HTTP/500 的详细信息不足以真正判断您的理论是否正确。如果您想解决问题,您将需要在日志记录中捕获完整的堆栈跟踪。我想你已经在这里得出了一个结论。不,您不需要 Dispose() 在 using{} 块结束之前。这就是 using{} 所做的

【讨论】:

    【解决方案2】:

    我认为 dispose() 调用是多余的,但我想确定一下。

    我们看到 SQL 日志中的连接池已饱和(我无法直接查看,我只是一名开发人员,而且这些东西在 prod 环境中运行),我的操作人员说他看到了连接超时...一旦超时,服务器就会再次开始运行,直到下一次它使连接池饱和。

    我们目前正在调整连接池设置...我想确定我没有做错任何事情,因为这是我第一次使用 Linq。

    谢谢!

    【讨论】:

    • 从 SQLserver 的日志中看不到 webserver 的连接池。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多