Класс .Net 4 Memory Cache и пользовательская сессия - PullRequest
4 голосов
/ 31 декабря 2011

Новый класс MemoryCache в .Net 4.0, похоже, действует как кэширование asp.net. Мои вопросы:

Является ли MemoryCache эквивалентом хранения объекта / значения для пользователя в Session Cache, но не в коде за страницей aspx.

Может ли значение, хранящееся в MemoryCache, которое существует на сервере, быть доступным для события веб-страницы?

Ответы [ 2 ]

11 голосов
/ 31 декабря 2011

Является ли MemoryCache эквивалентным хранению объекта / значения для пользователя в Sache Cache

Нет, это не эквивалентно.Объект сеанса ASP.NET предназначен для хранилища ключей / значений для каждого пользователя, тогда как MemoryCache - хранилище ключей / значений на уровне приложения (значения являются общими для всех пользователей).

Может ли значение, сохраненное в MemoryCache, которое существует на сервере, быть доступным для события веб-страницы?

В ASP.NET MVC обычно нет веб-страницысобытия, но вы можете получить доступ к значениям, хранящимся в MemoryCache везде в приложении.

По сути, в приложении ASP.NET новый объект MemoryCache является просто оболочкой для старого объекта HttpContext.Cache (он хранит значенияв старом объекте Cache).

0 голосов
/ 20 января 2018

Состояние сеанса пользователя относится к веб-миру, в то время как более новая MemoryCache - это новая реализация, которая теперь обобщает доступность кэширования для других типов приложений, а также для консольных приложений, приложений winform и т. Д. MemoryCache хранится вдомен приложения, в котором был создан его экземпляр, и является приложением для всех пользователей, обращающихся к приложению.Цитируя эту ссылку MSDN:

Основные различия между классами Cache и MemoryCache заключаются в том, что класс MemoryCache был изменен, чтобы его можно было использовать в приложениях .NET Framework, которые не являютсяASP.NET приложения.Например, класс MemoryCache не имеет зависимостей от сборки System.Web.Другое отличие состоит в том, что вы можете создать несколько экземпляров класса MemoryCache для использования в одном приложении и в одном и том же экземпляре AppDomain.

MemoryCache класс присутствует в отдельной сборке System.Runtime.Caching.dll в целом, чтона него можно сослаться

Примечание : класс MemoryCache и класс System.Web.Caching.Cache представляют собой разные реализации, лежащие в разных библиотеках без взаимозависимости.Просто концептуально их поведение выглядит очень похоже, так как в любом случае они кешируются в конце дня.

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

Чтобы ответить на ваш вопрос:

  • Для хранения чего-либо, что приложение широко, но легко-weight - Использовать Состояние приложения .
  • Для хранения всего, что всего приложения, но ресурсоемкое - Использовать Web Cache
  • Для хранения чего-либо, что зависит от пользователя (обычно легкие вещи, так как тяжелые вещи не масштабируются с ростом пользователей вашего сайта) - Используйте Состояние сеанса

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

...