由于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 .
谢谢:马蒂
2 回答
正如Darin在his answer中正确陈述的那样,您应该允许连接池机制完成其工作 . 唐't try and build something '聪明', it won' t一样好 .
具有数据库连接等昂贵资源的黄金法则是获得较晚并及早发布 . 只要你遵守那个,你就会做得很好 .
当你执行
new SomeSqlConnection()
时,实际上每次都不创建新连接 . 由于数据库连接的创建成本很高,因此ADO.NET会保留连接池并从中创建连接 . 您也可以删除对Close
方法的调用 . 以下是您可以在每个请求中安全使用的代码段: