2012-09-15 3 views
0

asp.net Sqlmembership.GetAll() 메서드 (페이징 오버로드)를 사용하고 있습니다. 이제 캐싱 레이어을 캐시 결과에 추가하려고하지만 총 레코드 수를 반환하는 GetAll 메서드의 출력 매개 변수에 문제가 있습니다. 캐시에서 데이터를 검색 할 때 totalRecords 매개 변수에 값을 할당하려면 어떻게해야합니까?캐싱을 사용할 때 매개 변수 totalRecords를 지정하십시오.

답변

0

나의 이해가 맞으면이 작은 흐름이 기본적인 흐름이다 당신의 목표

를 달성하는 데 도움이 될 것입니다 : 당신이 캐시 된 개체에 액세스 캐시 제공자에게 물어보고 싶은

  1. 개체가 null이 아닌 경우 올바른 형식으로 캐스팅하고 개체를 캐시에서 반환합니다 (이 경우 사용자 목록).
  2. 객체가 다음
    1. 합니다 (GetAll 방법을 사용하여) 원래 소스에서 개체
    2. 저장 캐시
    3. 돌아 검색된 객체에 검색된 객체를 검색 null의 경우 최종 처리
    4. . 최종 공정
  3. 어떤 경우

, 나는 MembershipUser 클래스 대신 사용자 지정 도메인 클래스와 함께 작동하도록 당신을 추천 할 것입니다

이 기본적인 예입니다

public IEnumerable<DomainUser> GetDomainUsers() 
    { 
     var context = HttpContext.Current; 
     var cache = context.Cache; 
     var domainUsers = cache["domainUsers"] as IEnumerable<DomainUser>; 

     if (domainUsers == null) 
     { 
      domainUsers = Membership.GetAllUsers().OfType<MembershipUser>().Select(x => new DomainUser 
       { 
        Email = x.Email, 
        Username = x.UserName 
       }); 

      cache.Insert(
       "domainUsers", // cache key 
       domainUsers, // object to cache 
       null, // dependencies 
       DateTime.Now.AddMinutes(30), // absoulute expiration 
       Cache.NoSlidingExpiration, // slading expiration 
       CacheItemPriority.High, // cache item priority 
       null // callback called when the cache item is removed 
      ); 

      context.Trace.Warn("Data retrieved from its original source"); 
     } 
     else 
     { 
      context.Trace.Warn("Data retrieved from cache"); 

     } 

     return domainUsers; 
    } 
+0

내가 문제가 GetAllUsers 오버로드는 페이징 매개 변수를 허용합니다. GetAllUsers (int pageIndex, int pageSize, out int totalRecords). 캐시에서 데이터를 가져올 때 totalRecords 매개 변수에 값을 할당하는 방법을 모르겠습니다. –

+0

이 표시됩니다. 그러나 귀하의 목표는 데이터베이스에서 레코드를 캐시하는 것이므로 모든 레코드를 캐시 한 다음 메모리에서 페이징을 수행하는 것이 가장 좋을 것이라고 생각합니다. ** 그러나 ** 당신이 원하는 것을 두 번 생각하는 것이 좋습니다. 캐시하려고 생각하는 경우 쿼리가 너무 오래 실행되거나 웹 서버와 데이터 서버 사이의 대기 시간이 용납 될 수없는 경우 일 수 있습니다. 그런 다음 모든 개체 묶음을 캐싱하고 메모리에서 페이징을 수행합니다. 그렇지 않다면 아마도 캐싱이 사이트 성능을 크게 향상시키지 못할 것입니다 – Jupaol

관련 문제