【问题标题】:Is the HttpContext.Current.Cache available to all sessionsHttpContext.Current.Cache 是否可用于所有会话
【发布时间】:2011-02-15 06:59:08
【问题描述】:

根据标题。我希望能够将一些数据保存在缓存对象中,但该对象必须可供所有用户/会话使用并且可以过期。

在 asp.net 网络应用程序中实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: asp.net caching


    【解决方案1】:

    HttpContext.Current 适用于所有页面,但不一定适用于所有线程。如果您尝试在后台线程、ThreadPool 委托、异步调用(使用 ASP.NET Async 页面)等中使用它,您最终会得到NullReferenceException

    如果您需要从库类(即不知道当前请求的类)访问缓存,则应改用HttpRuntime.Cache。这更可靠,因为它不依赖于HttpContext

    【讨论】:

    • @Aaronnaught - 我不确定除了访问 HttpContext.Current 之外还有什么不同,因为 HttpContext.Current.Cache 返回 HttpRuntime.Cache。
    • @Aaronnaught - 我想你是说不必依赖 HttpContext.Current 实际上是优势?
    • @Thomas: HttpContext.Current.Cache 无论如何都只是指向与HttpRuntime.Cache 相同的缓存,但前者引入了一个中间依赖关系,它有可能在以后破坏某些东西。在 SO 上搜索“HttpContext NullReferenceException”,你就会明白我的意思了......
    • 嗯。好的。我从来没有遇到过引用 HttpContext.Current 的错误,但鉴于我所阅读的内容,我会认为 HttpRuntime.Cache 会是更好的选择。 +1。
    【解决方案2】:

    HttpContext.Current.Cache 将会出现,但只有在您无法访问上下文成员时才应使用 Current。

    也回答你的第二个问题,是的,Cache 对象是应用程序的全局对象。

    这是一个很好的缓存介绍...

    How to cache in ASP.NET by using Visual C# .NET

    还有……

    Caching with ASP.NET 。不要跳过第 2 部分,“数据缓存”

    【讨论】:

    • 4GuysFromRolla - 哇,这是过去的一次爆炸 :-)。自 2002 年以来,ASP.Net 中的缓存真的没有变化吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多