在 C# 中过度使用 Sql 连接是一个问题吗?
Is overutilisation of Sql Connections in C# a problem?
在我目前正在处理的整个程序中,我意识到每当我需要访问 SQL 服务器时,我只需键入一个 queryString 并在 C# 中使用 SqlCommand 和 SqlConnection 执行我的查询。在程序的某个时刻,我什至在“for 循环”中打开了一个连接和 运行 一个查询。
程序不断打开-关闭连接是否不健康?
***我对术语不太熟悉,因此您可能在理解我在说什么时遇到一些问题:
经常这样做会不会有什么问题?:
string queryString = "Some SQL Query";
public void(){
SqlConnection con = new Connection(conString);
SqlCommand cmd = new SqlCommand(queryString,con);
cmd.Parameters.AddWithValue("@SomeParam",someValue);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
我几乎每次 class 创建时都使用此模板(通常用于获取、更新、插入数据 from/into 数据表)。
那么,它有害吗?
简短的回答是肯定的——不断打开和关闭连接是低效的。打开实际连接是一个非常昂贵的过程,并且在其需要的生命周期(通常是使用它的应用程序或进程的生命周期)内管理连接充满了错误。
这就是很久以前引入连接池的原因。在您的应用程序下方有一个层将以更有效的方式管理物理连接 opening/closing。这也有助于防止打开的连接丢失并继续保持打开状态(这会导致很多问题)的可能性。默认情况下启用池,因此您无需执行任何操作即可使用它。
使用池 - 您编写代码来打开连接并在特定代码段的持续时间内使用它,然后关闭它。如果连接池有一个打开但未使用的连接,它将重用它而不是打开一个新连接。当您关闭连接时,这只是 returns 到池的连接并使其可用于下一次打开尝试。您还应该熟悉 c# using statement.
在我目前正在处理的整个程序中,我意识到每当我需要访问 SQL 服务器时,我只需键入一个 queryString 并在 C# 中使用 SqlCommand 和 SqlConnection 执行我的查询。在程序的某个时刻,我什至在“for 循环”中打开了一个连接和 运行 一个查询。
程序不断打开-关闭连接是否不健康?
***我对术语不太熟悉,因此您可能在理解我在说什么时遇到一些问题:
经常这样做会不会有什么问题?:
string queryString = "Some SQL Query";
public void(){
SqlConnection con = new Connection(conString);
SqlCommand cmd = new SqlCommand(queryString,con);
cmd.Parameters.AddWithValue("@SomeParam",someValue);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
我几乎每次 class 创建时都使用此模板(通常用于获取、更新、插入数据 from/into 数据表)。 那么,它有害吗?
简短的回答是肯定的——不断打开和关闭连接是低效的。打开实际连接是一个非常昂贵的过程,并且在其需要的生命周期(通常是使用它的应用程序或进程的生命周期)内管理连接充满了错误。
这就是很久以前引入连接池的原因。在您的应用程序下方有一个层将以更有效的方式管理物理连接 opening/closing。这也有助于防止打开的连接丢失并继续保持打开状态(这会导致很多问题)的可能性。默认情况下启用池,因此您无需执行任何操作即可使用它。
使用池 - 您编写代码来打开连接并在特定代码段的持续时间内使用它,然后关闭它。如果连接池有一个打开但未使用的连接,它将重用它而不是打开一个新连接。当您关闭连接时,这只是 returns 到池的连接并使其可用于下一次打开尝试。您还应该熟悉 c# using statement.