HttpRuntime.Cache
получает Cache
для текущего приложения.
MemoryCache
Класс похож на ASP.NET Cache
класса.
MemoryCache
Класс имеет много свойств и методов для доступа к кэш - памяти , который будет вам знакомо , если вы использовали ASP.NET Cache
класс.
Основное различие между HttpRuntime.Cache
и MemoryCache
заключается в том, что последний был изменен, чтобы сделать его пригодным для использования приложениями .NET Framework, которые не являются приложениями ASP.NET.
Для дополнительного чтения:
Обновить :
По отзывам пользователей, иногда блог Джона Дэвиса не работает, поэтому я поместил всю статью в виде изображения. Пожалуйста, посмотрите это.
Примечание: если что-то непонятно, просто нажмите на изображение, после чего оно откроется в браузере, а затем нажмите еще раз для увеличения :)
Вот статья Джона Дэвиса. Чтобы сохранить удобочитаемость, я вырезаю уже устаревший раздел EntLib, вводную часть, а также заключение.
Кэш ASP.NET
ASP.NET или сборка System.Web.dll имеет механизм кэширования. Он никогда не предназначался для использования вне веб-контекста, но его можно использовать и за пределами Интернета, и он выполняет все вышеперечисленные действия по истечении срока действия в своего рода хэш-таблице.
После поиска в Google выяснилось, что довольно много людей, которые обсуждали встроенные функции кэширования в .NET, прибегали к использованию кеша ASP.NET в своих не-веб-проектах. Это уже не самая доступная и наиболее поддерживаемая встроенная система кэширования в .NET; В .NET 4 есть ObjectCache, о котором я расскажу позже. Microsoft всегда была непреклонна в том, что кеш ASP.NET не предназначен для использования вне Интернета. Но многие люди по-прежнему застревают в .NET 2.0 и .NET 3.5 и нуждаются в чем-то, с чем можно работать, и это работает для многих людей, хотя MSDN ясно говорит:
Класс для кэша ASP.NET - это System.Web.Caching.Cache в System.Web.dll. Однако вы не можете просто обновить объект Cache. Вы должны получить его из System.Web.HttpRuntime.Cache.
Работа с кешем ASP.NET описана в MSDN здесь .
Плюсы:
Минусы:
.NET 4.0 ObjectCache / MemoryCache
Наконец, Microsoft реализовала абстрактный класс ObjectCache в последней версии .NET Framework и реализацию MemoryCache, которая наследует и реализует ObjectCache для целей в памяти в настройках, отличных от Интернета.
System.Runtime.Caching.ObjectCache находится в сборке System.Runtime.Caching.dll. Это абстрактный класс, который объявляет в основном те же интерфейсы в стиле .NET 1.0, которые находятся в кэше ASP.NET.
System.Runtime.Caching.MemoryCache
является реализацией ObjectCache в памяти и очень похож на кеш ASP.NET с некоторыми изменениями.Чтобы добавить элемент с скользящим сроком действия, ваш код будет выглядеть примерно так:
var config = new NameValueCollection(); var cache = new MemoryCache("myMemCache", config); cache.Add(new CacheItem("a", "b"), new CacheItemPolicy { Priority = CacheItemPriority.NotRemovable, SlidingExpiration=TimeSpan.FromMinutes(30) });
Плюсы:
В отличие от кеша ASP.NET, вы можете создать экземпляр объекта MemoryCache.
По сравнению с интерфейсом кеша ASP.NET было внесено несколько небольших улучшений, таких как возможность подписаться на события удаления, не обязательно присутствуя при добавлении элементов, была удалена избыточная Insert (), элементы можно добавлять с помощью CacheItem объект с инициализатором, определяющим стратегию кеширования, и был добавлен Contains ().
Минусы:
Сделай сам: собери сам
На самом деле довольно просто создать кэширующий словарь, который выполняет явное или скользящее истечение срока. (Это становится намного сложнее, если вы хотите, чтобы элементы автоматически удалялись для очистки памяти.) Вот все, что вам нужно сделать:
Microsoft вынуждена поддерживать свои оригинальные проекты, потому что их пользовательская база стала зависимой от них, но это не означает, что они хорошие.
Плюсы:
IDictionary<K,T>
. Это значительно упрощает использование, поскольку его интерфейс более предсказуем, чем интерфейс словаря, а также делает его более доступным для помощников и методов расширения, которые работают с IDictionary <>.Минусы:
Среди всех четырех вариантов я предпочитаю именно этот. Я реализовал это базовое решение для кеширования. Пока что, похоже, он работает идеально, нет известных ошибок (пожалуйста, свяжитесь со мной с комментариями ниже или в jon-at-jondavis, если они есть !!), и я намерен использовать его во всех своих небольших побочных проектах, которые нуждаются в базовое кеширование. Вот:
Ссылка на Github: https://github.com/kroimon/ExpirableItemDictionary
Старая ссылка: ExpiredItemDictionary.zip
Стоит упомянуть: AppFabric, NoSQL и др.
Обратите внимание, что в заголовке этой статьи блога указано «Простое кэширование», а не «Сверхмощное кэширование». Если вы хотите заняться тяжелыми задачами, вам следует обратить внимание на специальные масштабируемые решения.
источник
MemoryCache - это то, что он говорит, кеш, хранящийся в памяти
HttpRuntime.Cache (см http://msdn.microsoft.com/en-us/library/system.web.httpruntime.cache(v=vs.100).aspx и http://msdn.microsoft.com/en- us / library / system.web.caching.cache.aspx ) сохраняется в зависимости от того, что вы настроили в своем приложении.
см., например, «ASP.NET 4.0: Написание настраиваемых поставщиков кэша вывода» http://weblogs.asp.net/gunnarpeipman/archive/2009/11/19/asp-net-4-0-writing-custom-output-cache -providers.aspx
источник
MemoryCache.Default также может служить «мостом», если вы переносите классическое приложение ASP.NET MVC в ASP.NET Core, поскольку в Core нет «System.Web.Caching» и «HttpRuntime».
Я также написал небольшой тест для хранения
bool
элемента 20000 раз (и еще один тест для его извлечения), и MemoryCache кажется в два раза медленнее (27 мс против 13 мс - всего для всех 20 тысяч итераций), но они оба сверхбыстрые, и это вероятно, можно проигнорировать.источник