Плюсы / минусы различных вариантов кэширования ASP.NET

Недавно я задал вопрос о кэшировании данных приложения в приложении ASP.NET MVC WebAPI, и это привело меня к новому вопросу. Каковы плюсы / минусы различных методов кэширования, доступных в ASP.NET?

Я наткнулся на:

  • Кэш памяти

    http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

  • Использование статических переменных-членов:

    private static Northwind.SuppliersDataTable suppliers = null;
    
  • Состояние приложения:

     HttpContext.Current.Application["key"] ="Value"
    
  • Кэш данных:

    HttpRuntime.Cache.Insert(
      /* key */                "key", 
      /* value */              "value", 
      /* dependencies */       null, 
      /* absoluteExpiration */ Cache.NoAbsoluteExpiration, 
      /* slidingExpiration */  Cache.NoSlidingExpiration, 
      /* priority */           CacheItemPriority.NotRemovable, 
      /* onRemoveCallback */   null);
    

Я уверен, что есть и другие, и я знаю, что все они технически хранят данные в памяти... так что вы знаете, что мне следует использовать для веб-интерфейса ASP.NET MVC?

Мой предыдущий вопрос: Кэширование данных приложения в памяти: MVC Web API

3 ответа

Решение

Каждая технология / методы кэширования имеют свой набор функций. Эти функции могут показаться невыгодными в одних прикладных требованиях, но могут быть выгодны в других прикладных требованиях.

Итак, вкратце, в зависимости от ваших требований определитесь, какая технология кэширования и какие функции вам больше подходят.

For example, Let us discuss some client side Caching techniques ,

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

Преимущество этой функции: уменьшает рабочую нагрузку на ваш сервер, сохраняя информацию о странице, используя опции на стороне клиента.

Тем не менее, MSDN четко говорит, что: Этот подход имеет минимальную поддержку безопасности.

Таким образом, можно использовать или не использовать эту функцию всегда, так как соображения безопасности также присутствуют.

Consider one more example, Page Output caching: это 2 типа, кэширование вывода страницы и кэширование фрагмента страницы.

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

And one last comment onApplication против HttpRuntime.cache:

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

  • Переменные приложения являются общими переменными для всех пользователей веб-приложения.
  • Переменные приложения ведут себя как статические переменные, и они заменяют статические переменные, поскольку статические переменные не сохраняют состояния в веб-приложениях.
  • Только переменные значения должны быть сохранены в переменных приложения, и как только они не используются, они должны быть удалены явно.

Cache: Можно добиться значительного улучшения производительности приложений ASP.NET, кэшируя часто запрашиваемые объекты и данные в Application или же Cache классы. В то время как Cache Класс, безусловно, предлагает гораздо больше гибкости и контроля, он лишь предлагает незначительное преимущество с точки зрения увеличения пропускной способности по сравнению с Application класс для кеширования. Было бы очень трудно разработать схему тестирования, которая могла бы точно измерить потенциальные преимущества Cache встроенное в класс управление менее используемыми объектами посредством процесса очистки, в отличие от того факта, что Application не предлагает эту функцию. Разработчик должен принять решение в этом случае и должен основываться на потребностях и удобстве проекта и его моделях использования. Проверьте эту ссылку для получения дополнительной информации.

Обратитесь к этой статье MSDN для полного отличного объяснения всех технологий кэширования в Asp.net с обсуждением возможностей каждой технологии.

Кроме того, эти 2 ссылки являются отличным источником для начала:

Относительно MemoryCache vs ASP.NET Cache: они предоставляют очень похожую функциональность. В приложении ASP.NET 4 я обычно предпочитаю ASP.NET Cache, если не по какой-либо другой причине, то из-за ошибки в.NET 4, которая, по-видимому, исправлена ​​в.NET 4.5.

Статические поля подходят для хранения общих данных, для которых не требуется политика истечения срока действия.

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

При использовании веб-API ваш первый выбор для кэширования должен всегда устанавливать заголовки кэширования в ответе HTTP. HttpResponseMessage.CacheControlHeader,

Ваши последние варианты должны быть чем-нибудь, что зависит от HttpContext или же HttpRuntime, так как это привязывает вас к конкретным хозяевам. Приложения Web API должны создаваться независимо от их хоста.

Другие вопросы по тегам