在ASP Classic中缓存记录集?

Kje*_*sen 2 caching asp-classic

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

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

我找到了一个例子,说明如何将记录集保存到xml并再次加载它们,但我希望留在内存中 - 但它可能是最好的选择.

Ant*_*nes 6

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

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

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

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

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

一个办法

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

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