2010-11-19 2 views
0

У меня есть репозиторий, который тянет как с db, так и с кэша.httpcache problem

Чтобы реализовать это, я создал интерфейс ICacheWrapper, который позволяет репо использовать HttpRuntime.Cache, AppFabric, что угодно. Конкретные классы ICacheWrapper обычно принимают кэш в своем конструкторе следующим образом: новый HttpCacheWrapper (HttpRuntime.Cache)

конструктор РИЙ принимает ссылку на обертку кэша так:

myRepo = new Repo(new HttpCacheWrapper(HttpRuntime.Cache)); 

Если я создаю 2 repos, кеш будет глубоко скопирован? Я бы не подумал, но наши проблемы с производительностью указывают иначе. Я что-то пропустил?

Спасибо за помощь!

ответ

0

Что вы видите? Что делает HttpCacheWrapper с HttpRuntime.Cache, он проходит?

Я подозреваю, что то, что вы видите вместо этого, - это политика кэширования, которая слишком долго держится за то, что вещи кешируются. Как сказал Раймонд Чен, «неправильная политика кэширования неотличима от утечки памяти».

Способ, которым я бы выделил это, - попытаться протестировать только с одним репо, используя имеющуюся у вас политику. Посмотрите, появляются ли проблемы с производительностью.

Если нет, то вперед и создайте второе репо и внимательно следите за использованием памяти.

+1

Результаты немного больше исследований/рефакторинга: похоже, что списки вещей, которые извлекаются из кеша, обслуживаются из одного кеша, что хорошо. Этот список фильтруется для соответствия запросам веб-формы. Затем отфильтрованный список привязан к веб-форме ui. Похоже, что происходит то, что отфильтрованный список создается в дополнение к кэшированному списку, и ни один из них не скопирован GC-ed. –