2012-01-31 107 views
0

您可以幫我決定以下哪種情況最好。ASP.NET輸出緩存vs ASP.NET對象緩存

我有3個用戶控件。 每個控件都需要根據SQL Server查詢的結果生成內容,例如,用戶控件#1使用查詢的輸出填充gridview。

我想利用緩存,以減少往返我的SQL Server數據庫。 我想出了以下兩個解決方案,並想知道哪一個最好。

場景#1:

將所有3個用戶控件的查詢在單個SQL Server存儲過程(分批),執行存儲過程包含頁內的用戶控制之外,然後提供與每個用戶的控制它的查詢輸出。 通過將所有3個查詢放在單個存儲過程中,可以減少數據庫的往返次數。
通過緩存存儲過程的輸出,將在這種情況下進行緩存。因此,存儲過程的輸出將每次從內存中獲取以向每個用戶控件提供其輸出,之後每個用戶控件將生成其輸出。 大約188個不同版本的查詢將被ASP.NET對象緩存緩存。

方案#2:

查詢在SQL Server每個單獨的用戶控件的內部數據庫,然後生成各個用戶控件的與查詢的輸出結果,每個一個獲得的。 這意味着每個用戶控件將單獨調用SQL Server數據庫。 通過緩存每個用戶控件的輸出可以緩存這種情況,因此用戶控件不必每次都生成其輸出,並且可以直接從內存中獲取其輸出。 在這種情況下,我必須緩存大約188個不同版本的一個或多個用戶控件。

在此先感謝

+0

兩個簡單的問題:1)三個數據庫調用有多少重疊?這些控件是否共享任何常用數據?,2)控件是否有可能推遲迴調數據庫,或者是所有三個控件*總是*加載? – GrayWizardx 2012-01-31 23:21:28

回答

1

無論哪種方式,你將不得不緩存188個版本的數據。我的投票將是:輸出緩存 - 因爲它需要較少的處理來生成HTML(這將包含在aspx頁面中;畢竟,這是終極目標),相比之下,如果內存達到幾乎完全相同緩存完成(只有更多的處理時間,因爲緩存的數據將不得不被轉換成每每個用戶請求它的HTML ,這將遠遠超過188次)。

您明白瞭解輸出緩存如何工作以及如何根據請求url(查詢)緩存不同版本的HTML。

+0

感謝您的建議。 – 2012-02-01 21:06:32

0

我不認爲這兩種情況必然是相互排斥的。應該沒有理由,你不能提取SQL查詢邏輯出來,然後使用控制輸出緩存,如果你願意。

雖然它的真正意義在於數據變化的頻率以及獲取數據開始的成本有多高,在你的問題中沒有任何事情表明你不能進行單個數據庫調用來獲取所有數據(對於所有版本)並將其保存在App緩存中,然後根據需要生成控件。

+0

謝謝,我會牢記這一點。 – 2012-02-01 21:05:46