【问题标题】:Caching in C#(ASP.NET)C#(ASP.NET) 中的缓存
【发布时间】:2012-05-31 15:40:14
【问题描述】:

我正在尝试在我的程序中实现缓存。我有一个 Web 应用程序,可以让用户访问一些学习课程。当用户登录时,我从我们的数据库中对他进行身份验证。现在,如果从列表中访问不同的课程,我不想返回数据库。相反,我想将值存储在缓存中,让我们说 20 分钟。该程序应 1)认证用户,让他访问课程。如果他改变了课程,程序应该在缓存中查找。如果用户 id 存在,让他访问课程而无需返回服务器。 2) 提供一种机制,如果 20 分钟后用户仍在系统上,则自动更新时间。因此,用户不会被注销。 我试过这样的东西

Cache ch = new Cache();
ch.Add("key","value);

但我在第二条语句中得到空引用异常。我以前从未使用过缓存,因此将不胜感激。

【问题讨论】:

标签: c# asp.net


【解决方案1】:

这就是我使用它的方式:

/// <summary>
/// Get Data
/// </summary>
/// <returns>data</returns>
public static ElementOut GetData()
{
    //function return value
    ElementOut functionReturnValue = new ElementOut();

    try
    {
        string key = "data";
        if (HttpRuntime.Cache[key] == null)
        {
            //fetch data
            var data = CreateBLLAdapter().GetData();

            //validate data
            if (data == null) throw new Exception("data is empty!");

            //set cache to 12 hours
            DateTime timeToExpire = DateTime.Now.AddHours(12);

            //set cache
            HttpRuntime.Cache.Insert(key, data, null, timeToExpire, Cache.NoSlidingExpiration);
        }

        //set return from cache
        functionReturnValue = (ElementOut)HttpRuntime.Cache[key];

    }
    catch (Exception ex)
    {
        //Log.WriteServerErrorLog(ex);
    }

    return functionReturnValue;
}

【讨论】:

    【解决方案2】:

    使用当前HTTP上下文的Cache:

    HttpContext.Current.Cache

    描述:当一个新的HTTP请求到来时,应用程序在一个通常称为Request Process Pipeline的管道中处理该请求,即在给出之前对请求一个接一个地做一些动作请求处理程序处理它。

    ASP.NET 执行的操作之一是根据某些参数加载会话和缓存数据。

    HttpContext.Current.Cache 是加载的缓存,你可以使用它。然后,当您在该缓存中存储某些内容时,ASP.NET 再次负责存储该缓存并将其保存在下一个 HTTP 请求中。

    您还可以使用页面的Cache 属性访问该全局对象。

    【讨论】:

      【解决方案3】:

      如果您在 ASP.NET 中开发,您可以简单地使用 ASP.NET session store,它为每个用户存储值,只要他的会话持续(默认情况下是他最后一次操作后的 20 分钟)

      【讨论】:

        【解决方案4】:

        你可以试试输出缓存。

        请参阅下面的链接了解更多详情。 http://msdn.microsoft.com/en-us/library/ms178597.aspx

        【讨论】:

        • 有但不知道为什么不显示
        猜你喜欢
        • 2012-11-04
        • 1970-01-01
        • 2010-12-14
        • 2011-01-28
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 2010-09-05
        相关资源
        最近更新 更多