Плюсы / минусы различных вариантов кэширования 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 on
Application
против 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 должны создаваться независимо от их хоста.