Подтвердить что ты не робот

Какая разница между кэшем HttpRuntime и кэшем HttpContext?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

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