.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
COM+ 对象池以及数据库连接池中 最小池大小 min pool size

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

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

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

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

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

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



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


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

Public Class Customer
    
Inherits ServicedComponent

    
Sub New()

        
Dim eventLogEntry As New System.Diagnostics.EventLog("complus")
        eventLogEntry.WriteEntry(
"complus""newed" & DateTime.Now)
    
End Sub


    
Protected Overrides Function CanBePooled() As Boolean
        
Return True
    
End Function

End Class

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

下次再提关于connection reset, 这个属性的影响也很大。;)



相关文章

相关软件