2010-02-11 75 views
4

我有一個簡單的問題,我只是不確定。我試圖提高Intranet網站的性能。我試圖通過實施一些緩存來限制訪問數據庫。我不熟悉緩存,但我不確定是否在用戶間共享?我希望這對個人用戶來說是獨一無二的。就像每個用戶擁有自己的獨立緩存,就像會話對象一樣。我正在嘗試這樣的事情在用戶中共享的ASP.NET還是特定於個人的緩存?

if (Cache["_InfoResult"] == null) 
     { 
      Cache["_InfoResult"] = db.GetInfoResultBySessionGuid(SessionGuid); 
     } 

     _InfoResult = (InfoResult)Cache["_InfoResult"]; 

然後使用_InfoResult對象來驅動頁面的區域。我擔心的是我希望Cache [「_ InfoResult」]對每個用戶都是唯一的。這是正確的還是這個對象對每個用戶都是一樣的?感謝您清理它。

歡呼聲中,在聖地亞哥

回答

11

〜CK的ASP.Net Cache連接到應用領域,所以它的所有用戶共享。

如果要緩存某個用戶的某些內容,請使用Session對象。

+0

ASP .Net Cache應該用於需要大量服務器資源的事情,但它們是在用戶之間共享的。 ASP.Net中是否有任何功能,或者是在網絡世界中的一般概念,其中訪問是用戶特定的,並且還允許您存儲非常耗費資源的對象。或者,如果我在會話本身中存儲了一些非常重的對象,這些對象是用戶特定的,那麼是否可以? – RBT 2018-01-19 23:02:01

3

緩存具有全局範圍,並且它在您的Web應用程序的生命週期中保持不變。 這不是每個httprequest。

你可以用一些簡單的代碼來測試它。

<asp:TextBox ID="txtData" runat="server" Width="200px"></asp:TextBox> 
<br /> 
<asp:Button ID="btnPutToCache" runat="server" Text="Put to Cache" onclick="btnPutToCache_Click" /> 
<br /> 
<asp:Button ID="btnGetFromCache" runat="server" text="Get from Cache" onclick="btnGetFromCache_Click" /> 
<br /> 
<asp:Label id="lblGetFromCache" runat="server"></asp:Label> 

而隱藏代碼:

protected void btnPutToCache_Click(object sender, EventArgs e) { 
     Cache["data"] = txtData.Text; 
    } 
    protected void btnGetFromCache_Click(object sender, EventArgs e) { 
     lblGetFromCache.Text = Cache["data"].ToString(); 
    } 

把所有上面的代碼到一個頁面。部署您的網站。從瀏覽器窗口的實例中打開頁面,將一些測試文本放入文本框並點擊放置到緩存按鈕。

打開一個新的瀏覽器窗口並點擊頁面。單擊Get from Cache按鈕,並觀察結果。