Доступен ли доступ к HttpContext.Current.Cache для всех сеансов
В соответствии с заголовком. Я хочу сохранить некоторые данные в объекте кэша, но этот объект должен быть доступен для всех пользователей/сеансов и может истечь.
Каков наилучший способ достижения этого в веб-приложении asp.net?
Ответы
Ответ 1
HttpContext.Current
доступна для всех страниц, но не обязательно для всех потоков. Если вы попытаетесь использовать его в фоновом потоке, ThreadPool
delegate, асинхронный вызов (используя ASP.NET Async) и т.д., Вы получите NullReferenceException
.
Если вам нужно получить доступ к кешу из классов библиотеки, то есть к классам, которые не имеют знания текущего запроса, вы должны использовать HttpRuntime.Cache
. Это более надежно, поскольку оно не зависит от HttpContext
.
Ответ 2
HttpContext.Current.Cache будет присутствовать, но Current следует использовать, только если вы не можете получить доступ к своему члену контекста.
Также, чтобы ответить на ваш второй вопрос, да, объект Cache является глобальным для приложения.
Здесь хорошее введение в кеширование...
Как кэшировать в ASP.NET с помощью Visual С#.NET
и...
Кэширование с помощью ASP.NET. Не пропустите часть 2, "Кэширование данных"