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






2.44/5 (6投票s)
2002 年 2 月 11 日
1分钟阅读

103789
在 Application 或 Session 对象中缓存数据是个好主意。然而,在 Application 或 Session 对象中缓存数据库连接则不是一个好主意。本文解释了原因以及如何最好地使用你的数据库连接。
虽然在 Application
或 Session
对象中缓存数据可能是一个好主意,但缓存数据库连接通常是不可取的。例如,Connection
对象,如果你将连接存储在 Session
对象中,你将不再受益于连接池。连接池在连接跨多个客户端共享时非常有用,并且资源仅在需要时才被使用,即如果 Connection
对象存储在 ASP Session
对象中,那么将为每个用户创建一个数据库连接。 同样,如果一个 Connection
对象存储在 Application
对象中并在所有页面中使用,那么所有页面将争夺对该连接的使用权。 这会对 Web 服务器和数据库造成不必要的压力。
与其缓存数据库连接,不如在每个使用 ADO 的 ASP 页面上创建和销毁 ADO 对象。 这是高效的,因为 IIS 已经内置了数据库连接池。 更准确地说,IIS 会自动启用 OLEDB 和 ODBC 连接池。 这确保了在每个页面上创建和销毁连接将是高效的。
由于连接的记录集存储了对数据库连接的引用,因此你不应该在 Application
或 Session
对象中缓存连接的记录集。 但是,你可以安全地缓存断开连接的记录集,这些记录集不保存对其数据连接的引用。 要断开记录集的连接,请执行以下两个步骤
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