Я использую MemoryCache в моем приложении asp. net. После того, как мое приложение работает в течение нескольких часов, процесс w3wp потребляет столько памяти, что может достигать 10 гигабайт памяти, и после этого приложение перестает отвечать на запросы и IIS сбрасывает его автоматически (с помощью механизма ping).
Я профилировал процесс приложения и обнаружить, что MemoryCache создает несколько экземпляров MemoryCacheStore внутри (равно числу процессоров), и каждый экземпляр занимает много памяти!
кажется, что по какой-то причине MemoryCache хранит одни и те же данные в нескольких экземплярах, и это приводит к огромному потреблению памяти.
Как вы видите на следующем изображении, у меня 16 процессоров и 16 из MemoryCacheStore внутренне создается одним MemoryCache экземпляр. Я проверил исходный код MemoryCache и обнаружил, что он создает массив MemoryCacheStore из Environment.Processors count, но не обнаружил, почему все эти экземпляры объединяют память и как это предотвратить? 
// как я использую кеш
_requestCache.Get(key, () =>
{
var query = _categoryRepository.Table;
if (!showHidden)
query = query.Where(c => c.Published);
query = query.Where(c => c.ParentCategoryId == parentCategoryId && !c.Deleted);
query = ApplyHiddenCategoriesFilter(query, storeId, showHidden);
var categories = query.OrderBy(x => x.DisplayOrder).ToList();
return categories;
});