这个示例演示了如何构建一个到数据源的连接池。你可以通过连接池部署高性能的应用程序。本例中使用连接串创建连接池,并且由 SqlConnection 自动管理。
string connString; connString = "server=(local);Integrated Security=SSPI;database=northwind;" + "pooling=true;"; SqlConnection myConnection = new SqlConnection(connString); myConnection.Open(); myConnection.Close();
本例中,在构建 SqlConnection 对象时, 在连接串中指定了连接池特性,就像下例中一样。请记住:连接池是隐式的,除非明确禁用,都会自动创建。因此,“True”是 pooling 关键字的默认设置(pooling=true)。
String connString;// Specification in the connection string:// Please note: Pooling is implicit, you automatically get it unless you disable it. // Therefore, "true" is the default for the pooling keyword (pooling=true). // Connection Reset: False// Connection Lifetime: 5// Enlist: true// Min Pool Size: 1// Max Pool Size: 50connString = "server=(local)\\SQLExpress;Integrated Security=SSPI;database=northwind;" + "connection reset=false;" + "min pool size=1;" + "max pool size=50";SqlConnection myConnection1 = new SqlConnection(connString);SqlConnection myConnection2 = new SqlConnection(connString);SqlConnection myConnection3 = new SqlConnection(connString);
现在用代码实现在连接池上使用多个 Connections 对象。首先,从连接池打开2个 Connections 对象并且回收它们。然后,从连接池打开3个 Connections 对象并且回收它们。
public class ConnectionPoolingExample { public void Run() { string connString; connString = "server=(local);Integrated Security=SSPI;database=northwind;" + "connection reset=false;" + "min pool size=1;" + "max pool size=50"; SqlConnection myConnection1 = new SqlConnection(connString); SqlConnection myConnection2 = new SqlConnection(connString); SqlConnection myConnection3 = new SqlConnection(connString); // 打开2个连接。一个是从连接池打开(参考 min pool size),另一个从数据源创建。 Console.WriteLine("打开2个连接。"); myConnection1.Open(); myConnection2.Open(); // 目前,连接池里有2个和连接串匹配的连接 Console.WriteLine("返回2个连接到连接池。"); myConnection1.Close(); myConnection2.Close(); // 从连接池取出1个连接 Console.WriteLine("从连接池打开1个连接。"); myConnection1.Open(); Console.WriteLine("从连接池取出第2个连接。"); myConnection2.Open(); Console.WriteLine("第3个连接从数据源创建。"); myConnection3.Open(); // 回收3个连接到连接池 Console.WriteLine("回收3个连接到连接池。"); myConnection1.Close(); myConnection2.Close(); myConnection3.Close(); } }
连接池模型类似于不通过连接池的连接。但是,当完成一次池连接释放连接回连接池时,调用 Close 方法是非常必要的。
原文连接: