Подтвердить что ты не робот

В чем разница между MemoryCache и ObjectCache в .net 4.0?

В чем разница между .NET framework 4.0 MemoryCache vs ObjectCache? Где использовать какой объект?

4b9b3361

Ответ 1

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

MemoryCache - это фактическая реализация ObjectCache.

Из документации:

ObjectCache

Представляет кеш объекта и предоставляет базовые методы и свойства для доступа к кешу объекта.

MemoryCache

Представляет тип, который реализует кеш в памяти.

Глядя на объявление для MemoryCache:

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

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

Вы можете написать свой собственный; например, DatabaseCache, который также может наследоваться от ObjectCache, но вместо этого он будет использовать базу данных в качестве хранилища резервных копий.

Для повседневного использования, если оно отвечает вашим потребностям, вы будете использовать и потреблять MemoryCache. Если вы хотите написать свой собственный, вы можете наследовать от ObjectCache и реализовать необходимые методы и свойства. Однако на самом деле, вероятно, мало практической пользы для этого, поскольку Microsoft уже сделала несколько других решений для кеширования, как и многие другие поставщики.

Ответ 2

Из MSDN;

Тип ObjectCache является основным типом для объекта in-memory кэш. Встроенный класс MemoryCache происходит из ObjectCache класс. Класс MemoryCache является единственным конкретным кэшем объекта реализации в .NET Framework 4, которая проистекает из Класс ObjectCache.

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

MemoryCache наследуется от ObjectCache.

Вы можете получить ссылку на экземпляр MemoryCache по умолчанию:

public static ObjectCache cache = MemoryCache.Default;

Ответ 3

ObjectCache является абстрактным классом, вы не можете его использовать. Как говорит Дэш в своем комментарии, он предназначен для того, чтобы показать, как должен строиться кеш и какие операции он поддерживает. MemoryCache - это реализация ObjectCache, и из вашего вопроса, скорее всего, вы должны использовать. Однако, поскольку ObjectCache является абстрактным, вы можете так же легко написать свой собственный FileCache, наследующий от ObjectCache, и это было бы совершенно правильно.