안녕하세요 여러분, 내 데이터베이스에서 다른 쿼리를 만들지 않고 같은 목록의 모든 사용자에게 보여주고 싶은 목록이 있습니다. 포럼에서 검색 나는 OutPutCache가 내가 따라야 할 최선의 방법이라는 것을 알았지 만, 어떻게 할 수 있는지 정말로 이해하지 못합니다. 가장 좋은 방법은 그렇게 OutputCache를Outputcache를 사용하여 모든 사용자가 볼 수있는 <T> 목록을 저장하려면 어떻게해야합니까?
[편집]
인가?
안녕하세요 여러분, 내 데이터베이스에서 다른 쿼리를 만들지 않고 같은 목록의 모든 사용자에게 보여주고 싶은 목록이 있습니다. 포럼에서 검색 나는 OutPutCache가 내가 따라야 할 최선의 방법이라는 것을 알았지 만, 어떻게 할 수 있는지 정말로 이해하지 못합니다. 가장 좋은 방법은 그렇게 OutputCache를Outputcache를 사용하여 모든 사용자가 볼 수있는 <T> 목록을 저장하려면 어떻게해야합니까?
[편집]
인가?
너는 너무 멀어지고있어; 한 번만 메모리에 보관하려는 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
}
}
컨트롤러 메서드의 [OutputCache] 특성은 쿼리 결과를 캐시합니다. VaryByParam 매개 변수를 사용하면 해당 매개 변수의 결과가 캐시되어 컨트롤러 메서드에서 데이터베이스 호출 횟수가 줄어 듭니다.
도움을 주셔서 감사합니다. –
작동 중입니다! 고마워요! –