DB的长期连接或按需连接?

时间:2013-06-30 21:48:12

标签: sql-server asp.net-mvc database

我被分配实现一个应用程序(在C ++中)来评估待定提交(提交是针对给定问题的编程算法)。一个站点(在ASP.NET MVC中)发布问题并允许用户提交他们的答案,然后将提交标记为"等待评估"在数据库(SQL Server 2008R2)上,这是我的工作开始时:

我的应用程序中有3个(或者更多个)实例作为服务运行。 每个实例必须每2秒检查数据库中是否存在任何待处理的提交。 如果它存在,我检索并编译它,成功编译后我执行它,最后,执行后,检查答案的正确性。然后我更新提交设置结果并从挂起表中删除它。 我需要在DB中指定挂起提交的当前状态(编译,运行,判断)。

评估一个submition的时间是〜(1-3)s,同一个实例永远不会同时评估一个提交。

我的问题是:如何连接到数据库服务器? 我有3种可能的解决方案,我需要知道什么应该更好(为了提高效率)和原因: 1 - 一旦我实例化应用程序并且从不关闭它就建立与DB的连接(当我删除实例或关闭服务器时关闭它,理论上永远不会发生。) 2 - 每2秒打开一个连接以获得待处理的提交(如果存在任何一个)等待完整的评估过程结束,设置评估结果然后关闭连接。 3 - 与2相同,但在检索提交时关闭连接,编译完成时,再次打开它并更新待处理提交的状态,关闭它,执行完成时再次打开它并更新待处理提交&# 39; s状态,关闭它,最后当判断结束时打开它并设置评估结果。

1 个答案:

答案 0 :(得分:1)

您没有说您正在使用的数据库访问库(ODBC,ado.net,其他?)。打开和关闭数据库连接是一项相对昂贵的操作。您应该在db访问框架中使用某种连接池方案。连接池会打开一段时间,当您的应用程序打开连接时,它将从池中获得已打开的连接。这将使其更有效率。去了解connection pooling 对于SQL Server