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