2012-01-23 8 views
0

저는 활성 레코드 행 (아음속)의 집합을 캐싱하고 있습니다. ANTS 메모리 프로파일 러를 사용하여 캐시를 살펴보면 캐시하려는 activerecord에 대한 관련 테이블도 캐시되어 있음을 알 수 있습니다. 이렇게하면 캐시 된 테이블이 추가로 필요하지 않기 때문에 캐시 된 항목이 매우 커집니다.subsonicproject active 캐싱 캐싱 전체 개체 그래프를 캐시합니다.

이 문제를 방지하는 방법에 대한 아이디어가 있으십니까?

답변

0

액티브 레코드 클래스에서 관계의 지연로드를 수정하거나 제거해야한다고 생각합니다.

게으른 로딩 동작은 the most current version에 라인 (300)에서 시작하여 ActiveRecord.tt 템플릿에 의해 생성됩니다

 #region ' Foreign Keys ' 
<# 
      List<string> fkCreated = new List<string>(); 
      foreach(FKTable fk in tbl.FKTables) 
      { 

       if(!ExcludeTables.Contains(fk.OtherTable)){ 
        string propName=fk.OtherQueryable; 
        if(fkCreated.Contains(propName)) 
        { 
         propName=fk.OtherQueryable+fkCreated.Count.ToString(); 
        } 

        fkCreated.Add(fk.OtherQueryable); 


#> 
     public IQueryable<<#=fk.OtherClass #>> <#=propName #> 
     { 
      get 
      { 

        var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo(); 
        return from items in repo.GetAll() 
         where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#> 
         select items; 
      } 
     } 

<# 
       } 
      } 

#> 
     #endregion 

나는이 지역 전체를 제거하고 과도한 캐시가 해결되었는지보고 시도 할 것입니다. 물론, 당신이 게으른 로딩 동작에 의존한다면, 당신은 지금 그것을 다루어야 만 할 것이다.

+0

감사합니다. 나는 activerecord-template을 변경하고 싶지 않았기 때문에 id가 참조하는 래퍼를 db의 행에 만들었습니다. 필요한 경우 가져올 수 있습니다. – ThomasD