2012-01-23 42 views
0

我正在缓存activerecord行(亚音速)的集合。当我使用ANTS Memory Profiler查看缓存时,可以看到我想要缓存的一些与activerecord相关的表也被缓存。这使得缓存的项目非常大,因为附加(不需要)缓存表。缓存亚音速项目activerecord缓存整个对象图

有关如何防止这种情况的任何想法?

回答

0

我相信你将不得不修改或删除Active Record类中关系的延迟加载。由ActiveRecord.tt模板生成

的延迟加载行为,the most current version开始行300:

 #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模板,所以我创建了一个包装,而不是使用id引用的数据库中的行,以便在需要时可以获取。 – ThomasD