Доступен ли HttpContext.Current.Cache для всех сеансов - PullRequest
17 голосов
/ 04 мая 2010

согласно заголовку. Я хочу иметь возможность сохранять некоторые данные в объекте кэша, но этот объект должен быть доступен для всех пользователей / сеансов и срок его действия может истечь.

Каков наилучший метод для достижения этого в веб-приложении asp.net?

Ответы [ 2 ]

21 голосов
/ 04 мая 2010

HttpContext.Current доступно для всех страниц , но не обязательно для всех потоков. Если вы попытаетесь использовать его в фоновом потоке, ThreadPool делегат, асинхронный вызов (с использованием страницы ASP.NET Async) и т. Д., Вы получите NullReferenceException .

Если вам необходимо получить доступ к кешу из библиотечных классов, то есть классов, которые не знают о текущем запросе, вам следует использовать HttpRuntime.Cache. Это более надежно, поскольку не зависит от HttpContext.

5 голосов
/ 04 мая 2010

HttpContext.Current.Cache будет присутствовать, но Current следует использовать, только если вы не можете получить доступ к своему члену контекста.

Также, чтобы ответить на ваш второй вопрос, да, объект Cache является глобальным для приложения.

Вот хорошее введение в кеширование ...

Как кэшировать в ASP.NET с помощью Visual C # .NET

и ...

Кэширование в ASP.NET . Не пропустите часть 2, «Кэширование данных»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...