【发布时间】:2012-01-23 01:52:33
【问题描述】:
我正在缓存一组活动记录行(亚音速)。当我使用 ANTS Memory Profiler 查看缓存时,我可以看到一些与我想缓存的活动记录相关的表也被缓存了。这使得缓存的项目非常大,因为额外(不需要)缓存的表。
关于如何防止这种情况的任何想法?
【问题讨论】:
标签: asp.net caching subsonic3 subsonic-active-record
我正在缓存一组活动记录行(亚音速)。当我使用 ANTS Memory Profiler 查看缓存时,我可以看到一些与我想缓存的活动记录相关的表也被缓存了。这使得缓存的项目非常大,因为额外(不需要)缓存的表。
关于如何防止这种情况的任何想法?
【问题讨论】:
标签: asp.net caching subsonic3 subsonic-active-record
我相信您将不得不修改或删除 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
我会尝试删除这整个区域并查看是否解决了过多的缓存问题。当然,如果您依赖延迟加载行为,您现在就必须解决这个问题。
【讨论】: