В чем разница между HttpRuntime Cache и HttpContext Cache? - PullRequest
19 голосов
/ 10 июля 2009

Я знаю, что есть очень похожий вопрос здесь , но я надеялся получить лучшее объяснение. Зачем мне когда-либо использовать HttpContext.Cache вместо HttpRuntime.Cache, если HttpContext действительно использует HttpRuntime.Cache за кулисами?

В статье Имитация службы Windows с использованием ASP.NET для выполнения запланированных заданий Омар использует HttpContext для хранения своих элементов кэша, но когда Джефф Этвуд реализовал его здесь , он решил используйте вместо этого HttpRuntime. Очевидно, что в этой конкретной ситуации это имеет смысл, поскольку вам не нужно делать веб-запрос для добавления элемента кэша обратно в HttpContext.

Однако я ищу несколько хороших указателей относительно того, когда использовать один против другого.

Ответы [ 3 ]

13 голосов
/ 10 июля 2009

Это действительно тот же самый кеш в конце, только HttpContext.Current может иногда быть нулевым (если он не в веб-контексте или в веб-контексте, но еще не создан). Вы всегда можете использовать HttpRuntime.Cache.

2 голосов
/ 11 июля 2009

Я тоже нахожу его в заблуждении, хотя мы все знаем, что он просто возвращает HttpRuntime.Cache внутри страны. Кроме того, HttpRuntime - плохой выбор для раскрытия кеша.

Все говорят, что Session - это кэш уровня сеанса, а кэш, о котором мы говорим, - уровень приложения. Я бы предпочел использовать Application.Cache в качестве кэша, который мы используем сегодня, и HttpContext.Cache для обозначения того, что известно как HttpContext.Items.

.

Что касается ответа на ваш вопрос, я думаю, что мы все должны придерживаться HttpRuntime.Cache, чтобы сделать наш код более понятным, даже если у нас есть различные способы доступа к нему. А если вы серьезно планируете использовать его, вам лучше обернуть свой собственный API и вызвать внутренний вызов HttpRuntime's или любой другой реализации кэша (EntLib, Velocity и т. Д.).

2 голосов
/ 10 июля 2009

Когда вы находитесь на обычной веб-странице, вы можете безопасно использовать HttpContext.Cache или просто Cache свойство страницы.

Если вы делаете что-то, чего нет на странице, вам часто нужно использовать HttpRuntime.Cache, чтобы безопасно получить к нему доступ.

В некоторых случаях вы можете узнать, существует ли http-контекст или нет, например, если вы запускаете отдельный поток с веб-страницы, этот поток не имеет http-контекста. В других случаях вы можете иногда иметь http-контекст, как в методе Application_Start в global.asax, так как приложение не всегда запускается из-за запроса.

...