我正在做一个DataBase密集型应用程序,因为我是ASP.NET
MVC4
C#
的新手,我想出了一些疑问:
1)打开连接并为所有请求保持打开是否更好?或者为每个请求设置Open()
和Close()
? (如果第一个选项是最好的,何时/何处关闭连接?)
2)我来自PHP,我习惯在FrontController
上打开一个连接(刚开始时)并在结束时关闭它,所以每个请求只打开一个连接,用于所需的一切,并在提供HTTP
响应之前删除它。 这是进入ASP.NET
MVC 4
的方式吗?
3)任何代码内的性能提示将不胜感激!! :)
答案 0 :(得分:1)
您可以查看此主题,它可以帮助您SQL
连接和closing / disposing
连接。
在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();
}
}
}
这不仅有助于实例,还有助于对概念的解释。
希望这有帮助。
答案 1 :(得分:1)
进入MVC
的方法是使用ORM
,例如EntityFramework或nHibernate.
Object Relational Mapper
将为您处理连接处理,您的主要目标是通过DBContext
或某种类型的存储库对象获取信息。使用ADO.NET
和SqlConnection
对象并不是纯粹的MVC,尽管它们仍然可以在应用程序中使用。
答案 2 :(得分:1)
1)更好的是:
为每个请求生成Open()和Close()
在ADO.net中使用连接池时,Close()将返回到连接池的数据库连接(不与数据库服务器断开连接),然后可以在下一个请求中使用它。
2)你可以像你的PHP代码那样做,我的经验是:当数据库连接打开时,尽快关闭/释放它(在数据库中查询完成后),它有助于改善请求的响应时间有时。
3)不仅应该尽快关闭/释放数据库连接,那些稀缺资源(文件句柄,tcp连接等)。
希望这会对你有所帮助。
答案 3 :(得分:0)
如果您决定使用自己的数据库访问层,则主要归结为应用程序的细节。例如,如果你有一个信息量很大的网站,比如eshop,那么在一个连接上加载大量信息会加快速度,但如果你期望很多用户,可能没有足够的连接可用于这种方法。工作