ASP.NET中的缓存是跨用户共享还是特定于个人?

时间:2010-02-11 18:00:38

标签: c# asp.net caching

我有一个简单的问题,我只是不确定。我正在尝试提高Intranet站点的性能。我试图通过实现一些缓存来限制到数据库的行程。我是新来的缓存,我不确定这是在用户之间共享的吗?我希望它对个人用户来说是独一无二的。就像每个用户都有自己独立的缓存,就像会话对象一样。我正在尝试这样的事情

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

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

然后使用_InfoResult对象来驱动页面区域。我担心的是我希望Cache [“_ InfoResult”]对每个用户都是唯一的。这是正确的还是这个对象对每个用户都是一样的?谢谢你清理它。

干杯, 〜在圣地亚哥

2 个答案:

答案 0 :(得分:12)

ASP.Net Cache附加到应用程序域,因此它为所有用户共享。

如果要为单个用户缓存某些内容,请使用Session对象。

答案 1 :(得分: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();
    }

将上述所有代码放入一个页面。部署您的网站。从浏览器窗口实例中点击页面,将一些测试文本放入文本框,然后点击Put to Cache按钮。

打开一个新的浏览器窗口并点击该页面。单击Get from Cache按钮,观察结果。