由于IIS为每个请求分配一个工作线程,我打算创建新对象来为每个请求提供服务。我有两个问题:
创建新对象以提供每个请求是否有效? (甚至还有替代品吗?)
创建新连接是否是线程安全,高效和最佳做法,并为每个请求打开和关闭它,如下所示:
using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString)) { conn.Open(); MySqlCommand cmd = new MySqlCommand("SELECT password FROM Admin WHERE username='" + username + "'", conn); object dbp = cmd.ExecuteScalar(); conn.Close(); }
PS。此示例来自此站点。我使用oracle db。
谢谢:马蒂
答案 0 :(得分:8)
执行new SomeSqlConnection()
时,实际上每次都不创建新连接。由于数据库连接的创建成本很高,ADO.NET会保留连接池并从中创建连接。您也可以删除对Close
方法的调用。以下是您可以在每个请求中安全使用的代码段:
var connectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString;
using (var conn = new MySqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT count(*) from some_table";
object result = cmd.ExecuteScalar();
}
答案 1 :(得分:0)
正如Darin在his answer中正确陈述的那样,您应该允许连接池机制完成其工作。不要试图建立一些“聪明”的东西,它不会那么好。
数据库连接等资源昂贵的黄金法则是迟到和早发布。只要你遵守,那你就可以做得很好。