使用LINQ to SQL耗尽数据库连接

时间:2009-01-08 22:50:55

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

在开发一个相对简单的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()调用以确保在方法完成时释放连接,但我不知道是否有必要。

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

谢谢!

2 个答案:

答案 0 :(得分:3)

您的诊断信息不够好。 HTTP / 500不够详细,无法确定您的理论是否正确。如果要解决问题,则需要在日志记录中捕获完整的堆栈跟踪。我想你已经在这里得出结论。不,您在使用{}块结束之前不需要Dispose()。这就是使用{} 的原因。

答案 1 :(得分:0)

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

我们看到连接池在SQL日志中饱和(我不能直接看,我只是一个开发人员,而且这些东西在prod环境中运行),我的操作员说他看到了连接超时......一旦超时,服务器再次开始运行,直到下次连接池饱和为止。

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

谢谢!