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

Плюсы/минусы различных настроек кэширования 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 webapi?

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

4b9b3361

Ответ 1

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

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

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 on Application vs HttpRuntime.cache:

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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