Решение для кеширования на основе популярности

У меня есть приложение С#, которое обрабатывает около 10 000 неизменяемых объектов, каждый объект имеет размер 50 КБ - 1 МБ. Приложение выбирает около 10-100 объектов для каждой операции. Выбор объектов зависит от обстоятельств и выбора пользователя, но некоторые из них используются очень часто.

Хранить все объекты в памяти все время слишком сложно, но время доступа к диску требует времени. Я хотел бы использовать кеш на основе популярности, чтобы уменьшить активность диска. Кэш будет содержать макс. 300 объектов. Я ожидаю, что во время использования шаблоны решают, какой из них следует кэшировать. Я могу легко добавить счетчик доступа к каждому объекту. Более популярные попадают, менее популярные должны покинуть кеш. Есть ли простой и оригинальный способ сделать это без кодирования моей задницы?


person user256890    schedule 17.04.2012    source источник


Ответы (4)


Вы можете использовать System.Runtime.Caching. Кэшировать объекты, которые постоянно используются, если кешированные объекты меняются через какое-то время, вы можете указать, сколько времени кеш действителен. Как только кеш становится недействительным, в обработчике событий вы можете перестроить кеш.

Убедитесь, что вы используете какой-либо механизм синхронизации потоков при перестроении кеша.

person Sandeep    schedule 17.04.2012
comment
+1 за то, что не изобретал велосипед. Вероятно, важно знать, что OP хочет использовать скользящее истечение срока действия, при котором наиболее часто используемые элементы будут предпочтительно храниться в кеше. - person Chris Shain; 17.04.2012

Я бы выбрал WeakReferences: вы можете создать простой кеш менеджер вдобавок к этому за пару минут, и пусть .NET самостоятельно обрабатывает фактическое управление памятью.

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

person Lâm Tran Duy    schedule 17.04.2012

Одним из готовых решений является использование скользящего окна истечения срока действия кэширования ASP.NET. .

person Aliostad    schedule 17.04.2012

Похоже на работу для MemCached! Это бесплатное, высокопроизводительное и гибкое решение для кэширования с открытым исходным кодом. Его можно загрузить по адресу http://www.memcached.org.

Чтобы получить общий обзор, посмотрите страницу Википедии по адресу https://en.wikipedia.org/wiki/Memcached. .

Удачи!

person Roy Dictus    schedule 17.04.2012