2

私はデータベースを集中的に使用するアプリケーションを実行していますが、初めてなので疑問に思いましたASP.NET MVC4 C#:

1) 接続を開いて、すべてのリクエストに対して開いたままにしておく方がよいですか? または、リクエストごとに作成Open()しますか?Close()(最初のオプションが最適な場合、いつ/どこで接続を閉じるのですか??)

2) 私は PHP 出身で、FrontController(最初に) で接続を開き、最後に閉じることに慣れています。そのため、すべての要求は 1 つの接続のみを開き、必要なすべてにそれを使用し、サービスを提供する直前にドロップします。HTTP応答。それは入る方法ASP.NET MVC 4ですか?

3)コード内のパフォーマンスに関するヒントをいただければ幸いです!! :)

4

4 に答える 4

1

入る方法は、 EntityFrameworkやnHibernateなどMVCの を使用することです。ORM

Object Relational Mapperが接続処理を行います。主な目的は、または何らかのリポジトリ オブジェクトを介して情報を取得することですDBContextADO.NETおよびオブジェクトの使用SqlConnectionは、アプリケーションで引き続き使用できますが、実際には純粋な MVC ではありません。

于 2013-09-03T09:57:56.910 に答える
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();
        }
    }
}

これは、例だけでなく、概念の説明にも役立ちます。

お役に立てれば。

SQL接続に関する MSDN の詳細情報

于 2013-09-03T09:55:55.060 に答える
1

1) Better one is:

make Open() and Close() for each request

when using connection pool in ADO.net Close() will return the database connection to connection pool(not disconnect from database server), then it can be used in next request.

2) You can do it like your PHP code, my experience is: when database connection was opened, close/release it as soon as possible(after your query has done in database), it help to improve response time of request sometimes.

3) Not only database connection, those scarce resources(File handles, tcp connections etc.) should be closed/released as soon as possible.

Hope this helps you.

于 2013-09-03T10:29:21.920 に答える