代码之家  ›  专栏  ›  技术社区  ›  Kjensen

在ASP Classic中缓存记录集?

  •  2
  • Kjensen  · 技术社区  · 16 年前

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

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

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   AnthonyWJones    16 年前

    从技术上讲,您可以将断开连接的ADODB记录集分配给应用程序对象。但是我不推荐。

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

    这意味着,每当请求需要访问记录集时,运行请求的当前线程将被阻止,因为代理将对最初创建记录集的线程进行马歇尔调用。如果另一个请求碰巧正在使用记录集,则封送的调用将排队。

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

    但情况变得更糟了。最初创建记录集的线程本身可能正在处理一个请求,在这种情况下,任何东西(除了线程本身)都无法访问该记录集,而不管该记录集是否正在实际使用。此外,即使线程上存在记录集访问队列,ASP dispatcher仍然可以向该线程发出请求。

    解决办法

    FreeThreadedXMLDocument . 顾名思义,这个对象是一个真正自由的线程对象,而不是单个线程对象的代理。

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

        2
  •  0
  •   Robert Harvey    16 年前

    已断开连接的记录集 来自数据源,因此允许 用户可以脱机工作并移动 是使用写入权限创建的,则 用户还可以修改和删除 更改将缓存在本地,而不是本地 影响主数据库。后来 可以重新建立到的连接 数据库,然后可以 随更改而更新。

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

    推荐文章