У вас есть пара вопросов, чтобы спросить себя:
- Являются ли данные, которые я извлекаю, динамическими?
- Если нет, как часто я ожидаю, что этот звонок произойдет?
Если ответы таковы: 1 - не совсем, а 2 - вызов часто случается, вы должны его кешировать.
Я не знаю, как настроен ваш доступ к данным, но я просто выбрасываю свои данные в объекты кэша, например:
public IQueryable<Category> FindAllCategories()
{
if (HttpContext.Current.Cache["AllCategories"] != null)
return (IQueryable<Category>)HttpContext.Current.Cache["AllCategories"];
else
{
IQueryable<Category> allCats = from c in db.Categories
orderby c.Name
select c;
// set cache
HttpContext.Current.Cache.Add("AllCategories", allCats, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 30, 0, 0), System.Web.Caching.CacheItemPriority.Default, null);
return allCats;
}
}
Это пример одного из моих запросов к репозиторию, основанный на LINQ to SQL. Сначала он проверяет кеш, если запись существует в кеше, он ее возвращает. Если нет, то он отправляется в базу данных, затем кэширует его со скользящим сроком действия.