Плюсы / минусы разных 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 ответа:
каждая технология/методы кэширования имеют свой собственный набор функций. Эти особенности могут казаться недостатком в одном прикладном требовании, но могут быть выгодными в других прикладных требованиях.
короче говоря, в зависимости от ваших требований решите, какая технология кэширования и какие функции лучше всего подходят для вас.
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 onApplicationvsHttpRuntime.cache:
Applicationэто не кэш, это глобальная коллекция именованных значений. если вы добавляете объект вApplicationон будет оставаться до тех пор, пока домен приложения рециркулирует.
- переменные приложения являются общими переменными для всех пользователей веб-приложения
- переменные приложения ведут себя как статические переменные, и они заменяют статические переменные, поскольку статические переменные без состояния в веб-приложениях
- только общие значения должны сохраняться в переменных приложения, и как только они не используются, они должны быть удалены явно.
Cache:можно получить значительные улучшения производительности в ASP.NET приложения путем кэширования часто запрашиваемых объектов и данных в любомApplicationилиCacheклассы. В то время какCacheкласс, безусловно, предлагает гораздо больше гибкости и контроля, это только кажется предложите предельное преимущество по отоношению к увеличенному объем надApplicationкласс для кэширования. Было бы очень трудно разработать схему тестирования, которая могла бы точно измерить потенциальные преимуществаCacheвстроенное управление класса менее используемых объектов через процесс очистки в отличие от того, что приложение не предлагает эту функцию. Разработчик должен принять решение в этом случае и должен быть основан на потребностях и удобстве проекта и свои картины использования. Проверьте этой ссылке дополнительные.см. этой статье для полного отличного объяснения всех технологий кэширования в Asp.net с discusiion на особенностях каждой технологии.
кроме того, эти 2 ссылки являются отличным источником для начала с:
о
MemoryCachevs ASP.NET кэш: они обеспечивают очень похожую функциональность. В Ан ASP.NET 4 приложения, я бы вообще предпочел ASP.NET кэш, если ни по какой другой причине, то из-за ошибка в .NET 4, который, по-видимому, исправлен в .NET 4.5.статические поля подходят для хранения общих данных, для которых не требуется политика истечения срока действия.
состояние приложения не намного больше, чем статический словарь с семантикой блокировки, которая совместима с классическим ASP-я бы использовал его только для обратной совместимости с устаревшим классическим ASP-кодом.
при использовании Web API ваш первый выбор для кэширования всегда должен заключаться в установке заголовков кэширования в HTTP-ответе.
HttpResponseMessage.CacheControlHeader.ваши последние варианты должны быть все, что зависит от
HttpContextилиHttpRuntime, так как это свяжет вас с конкретными хостами. Приложения Web API должны быть построены независимо от их хоста.