кэширование subsonicproject activerecord кэширует весь граф объекта - PullRequest
0 голосов
/ 23 января 2012

Я кэширую коллекцию строк активных записей (дозвуковых).Когда я смотрю на кэш с помощью ANTS Memory Profiler, я вижу, что некоторые связанные таблицы с активной записью, которую я хотел бы кэшировать, также кэшируются.Это делает кэшированные элементы очень большими из-за дополнительных (необязательных) кэшированных таблиц.

Есть идеи, как этого избежать?

1 Ответ

0 голосов
/ 23 января 2012

Полагаю, вам придется изменить или удалить отложенную загрузку отношений в классах Active Record.

Поведение отложенной загрузки создается шаблоном ActiveRecord.tt, начиная со строки 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

Я бы попытался удалить весь этот регион и посмотреть, разрешено ли чрезмерное кэширование.Конечно, если вы полагаетесь на ленивую загрузку, вам придется обратиться к этому сейчас.

...