浅析ASP.NET的数据库连接池及原理

时间:2022-08-02 03:33:24

浅析ASP.NET的数据库连接池及原理

(重庆三峡职业学院)

【摘要】数据库连接池在.NET开发中有着重要的作用,本文讲述了连接池的概念、工作原理,连接池的数据连接,以及如何避免连接泄漏,对于.NET应用程序在实际开发中具有深入的指导意义。

【关键字】连接池 连接

1、数据访问原理及数据连接池产生的必要性

实现数据访问,首先要建立了物理数据库的连接,通过提供的Connection连接类,实现数据库的连接。每当操作完成后,要断开连接对象,释放连接资源,一旦操作数据库,又要重新连接。反复处理数据,就要反复实现数据连接。当数据连接中,便可对数据库中的数据进行相关处理。

在应用程序的开发过程中,连接数据库服务器是应用程序耗费大量资源且相对较慢的操作,但连接又是必须的。通常,连接到数据库服务器由赘鲂枰花费很长时间的步骤组成,如建立物理通道、与服务器进行初次握手、分析连接字符串、服务器身份验证等。如果这些连接反复打开和关闭,则系统开销就会很大。因此为了避免这种相同连接不断地重复打开与关闭操作,从而使打开连接花费的系统开销最小,引入连接池的方法就很有必要。

2、连接池的概念

池可以想象成一个容器,数据连接池可以看成是一个已打开的及可重用的数据库连接的一个容器。里面可以有多个打开的数据连接,处于激活或非激活状态。通过为每个给定的连接配置保留一组活动连接来管理连接。每当用户在连接上调用Open时,池进程就会查找池中可用的连接。如果某个池连接可用,会将该连接返回给调用者,而不是打开新连接。应用程序在该连接上调用Close时,池进程会将连接返回到活动连接池中,而不是关闭连接。连接返回到池中之后,即可在下一个Open调用中重复使用。

连接池中提供了空闲的、打开的、可重用的数据库连接,而不再需要每次在请求数据库数据时新打开一个数据库连接。当数据库连接关闭或释放时,将返回到连接池中保持空闲状态,直到新的连接请求到来。连接池在所有的数据库连接都关闭时才从内存中释放。因此,如果有效地使用连接池,打开和关闭数据库所耗费的系统资源将大大减少。

3、连接池的工作原理

要理解连接池工作原理,首先需要了解程序里打开和关闭一个“物理连接”的关系。数据提供者在收到连接请求时建立连接的过程为:先在连接池里建立新的连接,然后建立该“逻辑连接”对应的“物理连接”,建立“逻辑连接”一定伴随建立“物理连接”。关闭一个连接的过程为:先关闭“逻辑连接”对应的“物理连接”,然后销毁“逻辑连接”。销毁“逻辑连接”一定伴随着关闭“物理连接”。其中,Open()是向Data Provider请求一个连接,Data Provider不一定需要完成建立连接的完整过程,可能只需要从连接池里取出一个可用的连接就可以;而Close()是请求关闭一个连接,Data Provider不一定需要完成关闭连接的完整过程,可能只需要把连接释放回连接池就可以。

图示中描述了一个应用中和不同客户端应用程序使用连接池访问数据库的情况。图中的虚线双向箭头表示客户端应用程序和数据库建立的“逻辑连接”,实线双向箭头表示连接池与数据库之间的“物理连接”。如果增加一个连接,连接池与数据库的“物理连接”就增加一个;如果减少一个连接。连接池与数据库的“物理连接”就减少一个。

4、连接池中的连接

4.1连接增加

连接池由唯一的连接字符串创建。一旦连接池被建立,就立即建立由最小连接数量指定的连接。如果只有一个连接被占用,那么其它的连接为池里“可用的”连接。如果某进程有连接请求,而且请求的连接的连接串与该进程的某个连接池的连接串相同,那么如果该连接池里有“可用的”连接,就从连接池里取出一个“可用的”连接使用,如果没有“可用的”连接就建立新的连接。

一旦程序运行连接的Close()方法后,“被占用的”连接被释放回连接池变为“可用的”连接。如果连接已经达到最大连接数,并且所有连接都被占用,新的连接请求需要等待。如果有被占用的连接释放回连接池,那么请求得到连接;如果请求等待超过连接时间,程序会抛出异常。

4.2 连接的减少

通常,对于如下两种情况,连接池里的连接会减少。其一、每当一个连接使用完后释放回连接池,如果当前时间减去该连接建立的时间的值大于Connection Lifetime设定的值,该连接被销毁。其二、当发现某个连接对应的“物理连接”断开时,该连接被销毁。

5、连接遗漏

如何避免连接的泄漏,请注意下面几点:其一、使用CommandBehavior.CloseConnection作为ExecuteReader参数,否则在多层结构的系统中,如果中间层向表现层返回DataReader,在表现层中关闭DataReader时不会关闭连接,就会造成连接遗漏。其二、执行DataAdapter的Fill和Update方法时,如果连接没有打开,那么DataAdapter会自动打开连接,执行完操作后自动关闭连接;但如果连接已经打开,DataAdapter执行操作后需要手动关闭连接。

综合来看,数据连接池在数据库操作中有着重要的作用,但在使用时,完全不必担心如何去管理数据连接池,它时由Data Provider自动管理的,应用程序默认采用数据连接池管理模式,在进行应用程序开发时,应注意连接的打开后的关闭,保证数据库的正常使用。

上一篇:人脸识别技术 下一篇:“一带一路”战略下跨境电子商务发展策略