65.9K
CodeProject 正在变化。 阅读更多。
Home

为什么缓存数据库连接是个坏主意

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.44/5 (6投票s)

2002 年 2 月 11 日

1分钟阅读

viewsIcon

103789

在 Application 或 Session 对象中缓存数据是个好主意。然而,在 Application 或 Session 对象中缓存数据库连接则不是一个好主意。本文解释了原因以及如何最好地使用你的数据库连接。

虽然在 ApplicationSession 对象中缓存数据可能是一个好主意,但缓存数据库连接通常是不可取的。例如,Connection 对象,如果你将连接存储在 Session 对象中,你将不再受益于连接池。连接池在连接跨多个客户端共享时非常有用,并且资源仅在需要时才被使用,即如果 Connection 对象存储在 ASP Session 对象中,那么将为每个用户创建一个数据库连接。 同样,如果一个 Connection 对象存储在 Application 对象中并在所有页面中使用,那么所有页面将争夺对该连接的使用权。 这会对 Web 服务器和数据库造成不必要的压力。

与其缓存数据库连接,不如在每个使用 ADO 的 ASP 页面上创建和销毁 ADO 对象。 这是高效的,因为 IIS 已经内置了数据库连接池。 更准确地说,IIS 会自动启用 OLEDB 和 ODBC 连接池。 这确保了在每个页面上创建和销毁连接将是高效的。

由于连接的记录集存储了对数据库连接的引用,因此你不应该在 ApplicationSession 对象中缓存连接的记录集。 但是,你可以安全地缓存断开连接的记录集,这些记录集不保存对其数据连接的引用。 要断开记录集的连接,请执行以下两个步骤

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient  ' step 1


' Populate the recordset with data

rs.Open strSQL, strProv

' Now disconnect the recordset from the data provider and data source

rs.ActiveConnection = Nothing    ' step 2
© . All rights reserved.