Asp.net Access OleDb 连接池 原理说明2008-9-3 12:28:35现在用Asp.net做普通企业一般都用Access,Sql Server等其它数据没必要用,一般企业信息量不大,过万的信息量的普通企业站几乎没有,每天的独立ip超三百就不错了,这是使用Access完成可以承受的,但用Asp.net Access开发网站时,即使在本地浏览,也会有明显的停顿现象,即使客户说没有关系,可做为一个程序员,发现自己写的程序在本地浏览都可以用肉眼看出停顿(甚至比asp明显慢一拍),那就很不爽,下面就是解决该问题. 连接池是高性能,可伸缩应用程序的一个重要特征,Access用OleDb服务实现数据库连接做网站,没有程序池的概念,所以以往用asp+access编程时,浏览一个网页,基本上都是一次将Connection对象打开然后在页尾调用Close()关闭连接.而在Asp.Net时,都是使用 这样做倒置的结果是,假设你在首页读取5条新闻,然后又读成一个公告、产品类别、最新产品、友情链接 等等,注意这里的每一项数据的开读取和读取完成都会调用Connection的Open()和Close(),如果用Access OleDb连接话,这样的重复关闭和打开Connection,会很慢,超过五六次在本地测试时明显有停顿,因为把一个全新的连接对象代价很高,那为什么Sql Server ,Oracle不会出现这样的问题呢?因为Sql Server和Oracle提供程序的连接池自动启用. 即连接通过调用诸如Close()或Dispose等方法释放到连接池,用Access OleDb做连接池也是这个原理,在把连接对象释放到连接池时,并没有真正的Close()或Dispose(),而是用一个时间机制(Timer)缓个几秒或更长的时间,再显示的关闭连接,否则连接可能不会返回到连接池,除非连接池达到了最大连接数并且连接仍然有效. 为了使连接池有效地起作用,昼使用连接对象返回到连接池中非常重要的. 在Sql Server 中,用以下方法比较好,类似上面. 注意:为了避免泄露连接,需要保证只有在事务完成时才关闭或处置连接(即把连接返回到连接池的过程),而且最好在完成后马上进行. 在服务器上,有多个数据库时使用连接池效果很好,因为每个连接池都与一个不同的连接字符串(即可以理解为类似的"Provider=SQLOLEDB;DataSource=(local);uid=sa;pwd=admin;Initial Catalog=...")关联,打开一个新的连接时,如果连接字符串不是正好与一个已有的连接池匹配,则创建一个新的连接池,一但创建连接池,就只能在进程结束时释放.这样做不会影响系统性能,因为维护非活动的或空的连接池所需要的开销非常低. 当一个连接对象被请求时,只要连接池中有一个可用的连接,就从该池中获取.一个可用的连接必须是当前未使用的,有一个匹配的事务上下文或者没有上下文,并且与服务器有一个有效的连接.如果没有可用的连接,连接池程序将当试创建一个连接对象.达到最大的连接池大小时,请入队列时,并且一有连接对象被释放到连接池中就用它来服务该请求.
相关文章
网友评论
|
|