2010-02-11 50 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按钮,并观察结果。