连接池的管理

 
接池的管理:

访问 量高的系 建一个 接都会消耗一定的 源,我 可以事先 建好一定数量的 接放入 接池中提供 使用,用 使用完后把 接返回 接池, 里我就来 说说连 接池的管理。
首先, 来看看 接池的概念:
1
接池允 许应 用程序从 接池中 得一个 接并使用 接,而不需要 为每 一个 求重新建立一个 接。一旦一个新的 接被 建并且放置在 接池中, 用程序就可以重 使用 接而不必 施整个数据 库连 程。
2
。当 用程序 求一个 接池 为该应 用程序分配一个 接而不是重新建立一个 接;当 用程序使用完 接后, 该连 接被 归还给连 接池而不是直接 放。
点:
1
。使用 接池的最主要的 点是性能。
2
建一个新的数据 库连 接所耗 时间 主要取决于网 的速度以及 用程序和数据 器的(网 )距离,而且 程通常是一个很耗 程。而采用数据 库连 接池后,数据 库连 求可以直接通 过连 接池 足而不需要 为该请 求重新 接、 认证 到数据 器, 这样 省了 时间
缺点:
1
。数据 库连 接池中可能存在着多个没有被使用的 接一直 接着数据 意味着 源的浪 )。
ps
要求 开发 开发时 计这 个系 最大提供的数量是多少。
池的 建和分配
接打 开时 ,将根据一 精确的匹配算法来 接池, 算法会使 接池与 接中的字符串相 关联 接池都与一个不同的 接字符串相 关联 。当新 接打 开时 ,如果 接字符串不精确匹配 池, 建一个新池。
在以下示例中,将 建三个新的 SqlConnection 象,但只需要使用两个 接池来管理 象。 注意,第一个和第二个 接字符串的差异在于 Initial Catalog 分配的
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
//
接池 A 建了
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
//
接池 B 建了,因 ConnectionString A 不匹配
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
//
使用 A 接池,因 ConnectionString A 匹配
接池一旦 建,直到活 动进 才会被 坏。 非活 或空池的 维护 只需要最少的系 统开销
接的添加
接池是 为每 个唯一的 接字符串 建的。当 建一个池后,将 建多个 象并将其添加到 池中,以 足最小池大小的要求。 接将根据需要添加到池中,直至达到最大池大小。
SqlConnection ,如果存在可用的 接, 将从池中 该对 象。若要成 可用 接, 该连 接当前必 未被使用,具有匹配的事 上下文或者不与任何事 上下文相 关联 ,并 且具有与服 器的有效 接。
如果已达到最大池大小且不存在可用的 接, 则该请 求将会排 。当 接被 放回池中 接池管理程序通 重新分配 接来 求。 Connection Close Dispose 接被 放回池中。
警告 使用完 Connection 后始 将其 关闭 ,以便 接可以返回到池中。 可以使用 Connection 象的 Close Dispose 方法来 实现 。不是 关闭 接可能不会添加或返回到池中。例如,如果 接已超出范 但没有 关闭 则仅 当达到最大池大小 该连 接仍然有效 该连 接才会返回到 接池中。
注意 不要在 Finalize 方法中 Connection DataReader 或任何其他托管 Close Dispose 。在 终结 器中, 仅释 直接 有的非托管 源。 如果 有任何非托管 源, 不要在 中包含 Finalize 方法。有 更多信息, 垃圾回收 程。
接的移除
如果 接生存期已 期,或者 接池管理程序 检测 到与服 器的 接已断 接池管理程序将从池中移除 该连 接。 注意,只有在 尝试 与服 行通信后,才可以 检测 这种 情况。如果 发现 接不再 接到服 器, 会将其 标记为 无效。 接池管理程序会定期 接池, 找已 放到池中并 标记为 无效的 象。 找到后, 接将被永久移除。
如果存在与已消失的服 器的 接,那 即使 接池管理程序未 检测 到已断 接并将其 标记为 无效,仍有可能将此 接从池中取出。当 这种 情况 ,将生成异常。但是, 了将 该连 放回池中,仍必 将其 关闭
字符串 关键 字:
Connection Lifetime 0
接返回到池中 ,将 它的 时间 和当前 时间进 行比 ,如果 时间间 隔超 Connection Lifetime 指定的 (以秒 为单 位), 该连 接。 在聚集配置中可以使用它来 制在运行服 器和 刚联 机的服 器之 达到 负载 平衡。
如果 值为 (0) 将使池 接具有最大的超 期限。
Connection Reset 'true' 确定在从池中移除数据 库连 是否将其重置。 Microsoft SQL Server 版本 7.0 ,如果 false ,将避免在 时经历 一个 外的往返 程,但必 注意的是 接状 (如数据 上下文)不会被重置。
Enlist 'true'
true ,如果存在事 上下文,池管理程序将自 线 程的当前事 上下文中登 记连 接。
Max Pool Size 100
池中允 的最大 接数。
Min Pool Size 0
池中 维护 的最小 接数。
Pooling 'true'
true ,将从相 的池中取出 接,或者在必要 时创 接并将其添加到相 的池中。
例代
namespace HowTo.Samples.ADONET
{
using System;
using System.Data.SqlClient;
public class connectionpooling
{
public static void Main()
{
connectionpooling myconnectionpooling = new connectionpooling();
myconnectionpooling.Run();
}
public void Run()
{
try
{
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: 50
connString = "server=(local)//NetSDK;Trusted_Connection=yes;database=northwind;" +
"connection reset=false;" +
"connection lifetime=5;" +
"min pool size=1;" +
"max pool size=50";
SqlConnection myConnection1 = new SqlConnection(connString);
SqlConnection myConnection2 = new SqlConnection(connString);
SqlConnection myConnection3 = new SqlConnection(connString);
// Open two connections.
Console.WriteLine ("
两个 接。 ");
myConnection1.Open();
myConnection2.Open();
// Now there are two connections in the pool that matches the connection string.
// Return the both connections to the pool.
Console.WriteLine ("
将两个 接都返回到池中。 ");
myConnection1.Close();
myConnection2.Close();
// Get a connection out of the pool.
Console.WriteLine ("
从池中打 一个 接。 ");
myConnection1.Open();
// Get a second connection out of the pool.
Console.WriteLine ("
从池中打 第二个 接。 ");
myConnection2.Open();
// Open a third connection.
Console.WriteLine ("
第三个 接。 ");
myConnection3.Open();
// Return the all connections to the pool.
Console.WriteLine ("
将所有三个 接都返回到池中。 ");
myConnection1.Close();
myConnection2.Close();
myConnection3.Close();
}
catch (Exception e)
{
// Display the error.
Console.WriteLine(e.ToString());
}
}
}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值