2012-04-17 2 views
3

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

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

ответ

1

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

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

+1

+1 для не изобретательного колеса. Наверное, важно знать, что OP хочет использовать скользящее окончание, которое будет предпочтительно хранить наиболее часто используемые элементы в кеше. –

1

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

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

0

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

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

Удачи вам!