2009-11-26 65 views

回答

6

從技術上講,你可以指定一個斷開ADODB記錄到Application對象。但我不會推薦它。

爲了將對象分配到應用程序對象中,它需要是自由線程的。 ADODB記錄集是單線程,但是它將在分配給應用程序對象時提供自由線程代理。

這意味着什麼時候一個請求需要訪問記錄集,請求運行的當前線程會阻塞,因爲代理會調用最初創建記錄集的線程。如果另一個請求恰好在使用記錄集,則編組呼叫將排隊。

這樣做的問題是實際上記錄集的所有用途都將被序列化,從而產生可伸縮性問題。只有一個請求可以同時訪問記錄集。

但它變得更糟。最初創建記錄集的線程本身可能正在處理一個請求,在這種情況下,不管記錄集是否實際使用,沒有任何內容(除了線程本身)可以訪問記錄集。此外,即使在線程上存在一個現有的記錄集訪問隊列,ASP調度程序仍然可能會向該線程發出請求。

一個解決方案

但是你已經接近了該解決方案。將記錄集的內容轉換爲XML,但不是將其保存到文件中,而是將其加載到FreeThreadedXMLDocument中。這個對象顧名思義是一個真正自由的線程對象,它不是代理單個線程對象。

現在,您可以將此xml文檔放在應用程序對象中,並可以同時從各種請求中訪問它。

+0

真棒安東尼,又一次:) – 2009-11-28 17:44:57

+1

很好的答案,但你有任何進一步的信息,你可以在FreeThreadedXMLDocument提供嗎? – 2014-09-25 07:36:38

0

斷開的記錄集本質上已經是一個緩存的記錄集,不是嗎?

[斷開連接的記錄是]已經斷開 從數據源,因此允許 用戶離線工作和記錄之間自由地移動 記錄集。如果創建了具有寫入權限的記錄集 ,那麼 用戶還可以更改和刪除 記錄,或添加新記錄。這些 更改將緩存在本地,而不是 影響主數據庫。稍後一個 連接可以重新建立到 的數據庫,然後可以更新 的更改。

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

+0

是的,但那是重點。:)我想跨多個用戶緩存記錄集*,因此我不必爲每個用戶訪問數據庫並獲取相同的數據(在斷開的記錄集中)。 – Kjensen 2009-11-26 20:18:15

+0

在這種情況下,您需要將斷開連接的記錄集放入全局對象中。看看這篇SO文章,它可能會給出一些線索,說明如何做到這一點:http://stackoverflow.com/questions/1255980/implement-object-caching-in-classic-asp-memory-leaking – 2009-11-26 20:27:19