Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top