Плюсы / минусы разных 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);
    

Я уверен, что есть и другие, и я знаю, что все они технически хранят данные в memory...so любая идея, что я должен использовать для ASP.NET MVC webapi?

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

3 55

3 ответа:

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

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

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

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

функции: снижает нагрузку на сервер, сохраняя информацию о странице с помощью параметров на стороне клиента.

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

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

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

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

And one last comment onApplication vs HttpRuntime.cache:

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

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

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

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

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

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

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

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

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

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