缓存subsonicproject activerecord缓存整个对象图

时间:2012-01-23 01:52:33

标签: asp.net caching subsonic3 subsonic-active-record

我正在缓存一系列activerecord行(亚音速)。当我使用ANTS Memory Profiler查看缓存时,我可以看到我想缓存的一些与activerecord相关的表也被缓存了。这使得缓存的项目非常大,因为另外(不需要)缓存表。

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

1 个答案:

答案 0 :(得分: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

我会尝试删除整个区域,看看是否解决了过多的缓存。当然,如果你依赖于延迟加载行为,你现在必须解决这个问题。