在ASP Classic中缓存记录集?

时间:2009-11-26 20:07:34

标签: caching asp-classic

如何在经典的asp场景中最好地缓存应用程序中断开连接的ADODB记录集?

似乎不可能将断开连接的记录集存储在应用程序状态,或者我错过了什么?

我找到了an example of how you can persist recordsets to xml and load them again,但我希望留在记忆中 - 但这可能是最好的选择。

2 个答案:

答案 0 :(得分:6)

从技术上讲,您可以将断开连接的ADODB记录集分配到Application对象中。但是我不推荐它。

为了将对象分配到应用程序对象中,它需要是自由线程的。 ADODB记录集是单线程但是它将在分配给应用程序对象时提供自由线程代理。

这意味着每当请求需要访问记录集时,运行请求的当前线程将阻塞,因为代理将编组调用最初创建记录集的线程。如果另一个请求碰巧使用记录集,则编组的呼叫将排队。

问题在于,实际上记录集的所有使用都将被序列化,从而产生可伸缩性问题。只有一个请求可以同时访问记录集。

但它变得更糟。最初创建记录集的线程本身可以处理请求,在这种情况下,无论记录集是否实际被使用,都没有(线程本身除外)可以访问记录集。此外,即使在线程上存在记录集访问的现有队列,ASP调度程序仍可以向线程发出请求。

解决方案

但是你已经接近解决方案了。将记录集的内容转换为XML,而不是将其保存到文件中,将其加载到FreeThreadedXMLDocument。顾名思义,这个对象是一个真正自由的线程对象,它不是单个线程对象的代理。

现在,您可以将此xml文档放在应用程序对象中,并同时从各种请求中访问它。

答案 1 :(得分:0)

断开连接的记录集本质上已经是缓存的记录集了,不是吗?

  

[已断开连接的记录集]   已断开连接的记录集   从数据源,因此允许   用户离线工作并移动   记录之间自由。如果是Recordset   是用写权限创建的   用户也可以更改和删除   记录或添加新记录。这些   更改将在本地缓存而不是   影响主数据库。后来一个   连接可以重新建立   数据库,然后可以   随着更改而更新。

http://www.devguru.com/features/tutorials/DisconnectedRecordsets/tutDisconnRS.asp