2011-08-12 1 views
1

안녕하세요 여러분, 내 데이터베이스에서 다른 쿼리를 만들지 않고 같은 목록의 모든 사용자에게 보여주고 싶은 목록이 있습니다. 포럼에서 검색 나는 OutPutCache가 내가 따라야 할 최선의 방법이라는 것을 알았지 만, 어떻게 할 수 있는지 정말로 이해하지 못합니다. 가장 좋은 방법은 그렇게 OutputCache를Outputcache를 사용하여 모든 사용자가 볼 수있는 <T> 목록을 저장하려면 어떻게해야합니까?

[편집]

인가?

답변

1

너는 너무 멀어지고있어; 한 번만 메모리에 보관하려는 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

도움을 주셔서 감사합니다. –

+0

작동 중입니다! 고마워요! –

0

컨트롤러 메서드의 [OutputCache] 특성은 쿼리 결과를 캐시합니다. VaryByParam 매개 변수를 사용하면 해당 매개 변수의 결과가 캐시되어 컨트롤러 메서드에서 데이터베이스 호출 횟수가 줄어 듭니다.

관련 문제