2

我正在做一个数据库密集型应用程序,当我是新手时,我提出了一些疑问ASP.NET MVC4 C#

1)打开连接并为所有请求保持打开状态会更好吗?还是为每个请求提出Open()和?Close()(如果第一个选项是最好的,我什么时候/在哪里关闭连接??)

2)我来自PHP,我习惯于在FrontController(刚开始时)打开一个连接并在最后关闭它,所以每个请求只打开一个连接,将它用于所需的一切,并在服务之前将其丢弃HTTP回复。是这样进去的ASP.NET MVC 4吗?

3)任何代码内性能提示将不胜感激!:)

4

4 回答 4

1

进入的方法MVC是使用EntityFrameworknHibernateORM等。

它将为您处理连接处理,您的Object Relational Mapper主要目标是通过某个DBContext或某种存储库对象获取信息。使用ADO.NETSqlConnection对象并不是真正的纯 MVC,尽管它们仍然可以在应用程序中使用。

于 2013-09-03T09:57:56.910 回答
1

1)更好的是:

为每个请求创建 Open() 和 Close()

在 ADO.net 中使用连接池时 Close() 会将数据库连接返回到连接池(不与数据库服务器断开连接),然后可以在下一个请求中使用。

2)你可以像你的PHP代码那样做,我的经验是:打开数据库连接时,尽快关闭/释放它(在数据库中完成查询之后),有时有助于提高请求的响应时间。

3)不仅是数据库连接,那些稀缺的资源(文件句柄,tcp连接等)应该尽快关闭/释放。

希望这对您有所帮助。

于 2013-09-03T10:29:21.920 回答
1

你可以看看这个线程,它应该可以帮助你SQL连接和closing / disposing连接。

SQL 连接

在语句中使用SQL连接的代码片段;using

public void InsertMember(Member member)
{
    string INSERT = "INSERT INTO Members (Name, Surname, EntryDate) VALUES (@Name, @Surname, @EntryDate)";

    using (sqlConnection = new SqlConnection(sqlConnectionString_WORK))
    {
        sqlConnection.Open();

        using (SqlCommand sqlCommand = new SqlCommand(INSERT, sqlConnection))
        {
            sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar).Value = member.Name;
            sqlCommand.Parameters.Add("@Surname", SqlDbType.VarChar).Value = member.Surname;
            sqlCommand.Parameters.Add("@EntryDate", SqlDbType.Date).Value = member.EntryDate;

            sqlCommand.ExecuteNonQuery();
        }
    }
}

这不仅有助于举例,而且有助于解释这一概念。

希望这可以帮助。

SQLMSDN关于连接的进一步阅读

于 2013-09-03T09:55:55.060 回答
0

恕我直言,在 ASP.Net 4 中使用的方法是使用实​​体框架或其他一些 ORM,如 NHibernate:D

如果您决定使用自己的数据库访问层,则主要取决于应用程序的细节。例如,如果您有一个信息量很大的网站,例如 eshop,那么在一个连接上加载大量信息会加快速度,但如果您期望有很多用户,那么这种方法可能没有足够的连接可用工作。

于 2013-09-03T09:57:53.727 回答