COM+ 对象池以及数据库连接池中 最小池大小 min pool size

ADO.NET 中引入了数据库连接池的概念,其实默认我们在连接数据库的时候已经用了数据库连接池。比如

None.gif SqlConnection conn  =   new  SqlConnection();
None.gifconn.ConnectionString 
=   " Integrated Security=SSPI;Initial Catalog=pubs " ;
None.gifconn.ConnectionString 
=   " Integrated Security=SSPI;Initial Catalog=pubs;pooling=true;min pool size=0;max pool size=100;connection reset=true " ;
None.gifconn.Open();
None.gif

代码中两种数据库连接字符串的效果是一样的。都是说要启用连接池,池的最小时0,最大是100,每一个连接用完放回池的时候,会重置其上下文。对这种做法,有几点很容易误解

1. Min Pool Size 的意义:假设这个地方改为50 的话。
我早期的理解: 在数据库连接总的数目不超过50的时候,根本不使用池的概念。也就是说数据库的连接时线形的从1 随着用户的新连接逐渐加到50 。超过50 之后,开始有池的概念。新的连接会重用已有的连接
结果发现这个想法是错误的。
如果我代码改为

None.gif New SqlConnection( " server=.;database=northwind;trusted_connection=yes;min pool size=100 " )
在第一个用户调用 cnn.open 的时候,结果数据库的连接一下子初始化了100个。

在查询分析器中用 sp_who 看了一下,一下子就多了100个。 emsmileo.gif

cnn.JPG

这一点确实出乎我的意料。


然后我验证了一下 COM+ 的对象池确实也是在第一次构造的时候用min pool size 实例化很多对象

ExpandedBlockStart.gif ContractedBlock.gif Public   Class Customer Class Customer
InBlock.gif    
Inherits ServicedComponent
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Sub New()Sub New()
InBlock.gif
InBlock.gif        
Dim eventLogEntry As New System.Diagnostics.EventLog("complus")
InBlock.gif        eventLogEntry.WriteEntry(
"complus""newed" & DateTime.Now)
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Protected Overrides Function CanBePooled()Function CanBePooled() As Boolean
InBlock.gif        
Return True
ExpandedSubBlockEnd.gif    
End Function

ExpandedBlockEnd.gif
End Class

结果 COM+ app 配置pool 的时候,在对象第一次调用的时候会在系统日志中写对应min pool size 数目的日志。 emthup.gif

下次再提关于connection reset, 这个属性的影响也很大。;)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值