SubsonicProject ActiveRecord를 캐싱하는 것은 전체 객체 그래프를 캐시합니다
-
12-11-2019 - |
문제
ActiveRecord 행 (아바이스닉)의 컬렉션을 캐싱하고 있습니다.개미 메모리 프로파일 러를 사용하여 캐시를 볼 때, 캐시하고 싶은 ActiveRecord에 대한 일부 관련 테이블도 캐시됩니다.이렇게하면 캐시 된 항목이 캐시 된 테이블이 추가로 (필요 없음) 때문에 캐시 된 항목을 매우 크게 만듭니다.
이를 방지하는 방법에 대한 아이디어는 무엇입니까?
해결책
활성 레코드 클래스에서 관계의 게으른 로딩을 수정하거나 제거해야합니다.
게으른 로딩 동작은 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
.
이 전체 영역을 제거하고 과도한 캐싱이 해결되었는지 확인하려고합니다.물론 게으른 로딩 행동에 의존하면 지금 주소를 알려야합니다.
제휴하지 않습니다 StackOverflow