Как я могу использовать Outputcache для сохранения списка <T>, который могут видеть все пользователи? - PullRequest
1 голос
/ 12 августа 2011

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

[EDIT]

Является ли OutPutCache лучшим способом сделать это?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Вы слишком далеко продвинулись здесь;Если все, что у вас есть, это List<T>, который вы хотите сохранить в памяти некоторое время, вам не нужно кэширование вывода.Кэширование вывода - это когда вы хотите кэшировать всю визуализированную страницу для отправки пользователям без вызова вашего контроллера.

Вам просто нужно сохранить объект в памяти, либо через общую переменную, либо через старое кеширование.

public class MyListFetcher<T>
{
     public List<T> FetchData()
     {
          List<T> obj = HttpRuntime.Cache["myObjectCacheKey"] as List<T>;

          if(obj != null)
             return obj;

          obj = FetchDataFromDatabase();

          HttpRuntime.Cache.Insert("myObjectCacheKey", obj, null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);

          // Inserts the item and keeps it there for five minutes; then the cache will be invalidated. No sliding expiration

         return obj;
     } 

     protected List<T> FetchDataFromDatabase()
     {
         // Your DB fetch code
     }
}
0 голосов
/ 12 августа 2011

Атрибут [OutputCache] в методе контроллера будет кэшировать результат запроса - если вы используете параметр VaryByParam, он будет кэшировать результат для этого параметра, уменьшая количество обращений к базе данных из метода контроллера.

...