C# Umbraco RelationService.GetByParentId(memberId)速度较慢。每个项目激发两个查询
我当前正在尝试通过调用以下命令获取一个父项的所有关系项:C# Umbraco RelationService.GetByParentId(memberId)速度较慢。每个项目激发两个查询,c#,umbraco,umbraco7,C#,Umbraco,Umbraco7,我当前正在尝试通过调用以下命令获取一个父项的所有关系项: var items = ApplicationContext.Current.Services.RelationService.GetByParentId(members.GetCurrentMemberId()).ToArray(); 一切都很好。除了查看MiniProfiler外,我可以看到它对每个项都进行了两次查询,这会导致大量项出现一些重大性能问题。 我查看了UmbracoCMS代码,发现了以下代码: protected ov
var items = ApplicationContext.Current.Services.RelationService.GetByParentId(members.GetCurrentMemberId()).ToArray();
一切都很好。除了查看MiniProfiler外,我可以看到它对每个项都进行了两次查询,这会导致大量项出现一些重大性能问题。
我查看了UmbracoCMS代码,发现了以下代码:
protected override IEnumerable<IRelation> PerformGetByQuery(IQuery<IRelation> query)
{
var sqlClause = GetBaseQuery(false);
var translator = new SqlTranslator<IRelation>(sqlClause, query);
var sql = translator.Translate();
var dtos = Database.Fetch<RelationDto>(sql);
foreach (var dto in dtos)
{
yield return Get(dto.Id);
}
}
受保护的覆盖IEnumerable PerformGetByQuery(IQuery查询)
{
var sqlClause=GetBaseQuery(false);
var translator=新的SqlTranslator(SQL子句,查询);
var sql=translator.Translate();
var dtos=Database.Fetch(sql);
foreach(dto中的var dto)
{
收益返回Get(dto.Id);
}
}
dto
上的foreach正在向umbracorrelationtype
表发送每个MoveNext()
的查询。Get()
方法实际上是从umbracorrelation
表中查询单个项。
我认为它应该利用那里的缓存,但显然不是
无论如何。如何在这里提高性能?我是否可以在不完全绕过Umbraco的情况下,以某种方式在一个查询中访问内容
我使用的是Umbraco 7.2.6,我建议先获取父节点或Id,然后使用ApplicationContext.Services.RelationService.GetById(parent.Id),因为它的数据库查询较少。可能会在上问同样的问题,或者最终在上创建问题?我知道这不会自动解决你的问题,但也许多关注它可以让你更接近:-)谢谢。我在这里提交了这个问题:你的MiniProfiler档案截图从40秒开始!我更感兴趣的是那段时间发生的事情,而不是你发布的片段。 ApplicationContext.Services.RelationService.GetById(parent.Id)