簡體   English   中英

在ASP.NET中“緩存”一個大表

[英]'Caching' a large table in ASP.NET

我了解每次刷新頁面(尤其是在“ AjaxLand”中)都會導致從頭開始調用我的后端/代碼隱藏類……這是一個問題,因為我的類(它是System.Web.UI中的成員對象) .Page)包含從數據庫中獲取的大量數據。 因此,現在AjaxLand中的每個頁面刷新都使我進行大型后端DB調用,而不僅僅是重用內存中的類對象。 有什么解決辦法嗎? 這是會話變量起作用的地方嗎? 會話變量是我必須在鏈接到單用戶和單會話實例的內存中保留對象的唯一選擇嗎?

您需要ASP.Net緩存

特別是數據緩存

如果您的數據是特定於用戶的,那么使用Session就可以了。 如果您有網絡農場或網絡花園,請當心。 在這種情況下,您將需要會話服務器或數據庫進行會話。

如果您的數據是應用程序級的,那么應用程序數據緩存可能是解決之道。 如果RAM有限且數據量巨大,請小心。 緩存可能會在不適當的時候清空自己。

無論哪種方式,您都需要測試您的應用程序如何執行更改。 您甚至可能會發現返回數據庫是最糟糕的選擇。

另外,您可以看看延遲加載一些數據,以減輕數據量。

看看這篇有關ASP.NET的各種緩存機制的MS 文章 您可能會感興趣,有一個名為“在服務器內存中緩存任意對象”的部分。

既然您提到Ajax,我想您可能要考慮以下幾點:

假設這個大數據集是靜態的而不是暫時的,在第一次調用Ajax時,您的應用程序查詢數據庫,檢索大量數據並返回到客戶端(即,在瀏覽器上運行的瀏覽器/ JavaScript等),現在是客戶端已經將所有這些存儲在內存中。 隨后,無需再返回服務器以獲取客戶端已在內存中存儲的相同數據。 您需要做的是使用JavaScript重建DOM或其​​他任何內容。 從那時起,所有工作都可以在客戶端上完成。

現在假設數據不是靜態的而是瞬態的,那么通過將數據放置在服務器上來緩存會話絕對不是您想要的解決方案。 每次客戶端向服務器發送請求時,服務器僅返回高速緩存(會話)中的內容,則數據已經過時,並且與客戶端內存中的數據沒有任何區別。

關鍵是,如果數據是靜態的,則在內存中已有數據之后,將往返行程保存到服務器。 如果數據是瞬態的,恐怕除了以某種方式重新查詢或重新檢索數據並將所有內容發送回客戶端之外,沒有廉價的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM