c# - Umbraco RelationService.GetByParentId(memberId) 慢。每个项目触发两个查询

标签 c# umbraco umbraco7

我目前正在尝试通过以下方式获取一位家长的所有关系项:

var items = ApplicationContext.Current.Services.RelationService.GetByParentId(members.GetCurrentMemberId()).ToArray();

一切正常。除了当我查看 MiniProfiler 时,我可以看到它针对每个项目触发了两个查询,这导致了一些与大量项目相关的主要性能问题。 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);
    }
}

dtos 上的 foreach 正在将每个 MoveNext() 的查询发送到 umbracoRelationType 表。 Get() 方法实际上从 umbracoRelation 表中查询单个项目。 我认为它应该利用那里的缓存,但显然不是。

无论如何。我如何在这里提高性能?我能否以某种方式在不完全绕过 Umbraco 的情况下通过单个查询获取内容?

我正在使用 Umbraco 7.2.6

最佳答案

我建议获取父节点或 Id - 然后使用

ApplicationContext.Services.RelationService.GetById(parent.Id)
因为它的数据库查询较少。

关于c# - Umbraco RelationService.GetByParentId(memberId) 慢。每个项目触发两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31282575/

相关文章:

c# - 如何保护 dll 方法的安全

umbraco - 您如何在 umbraco 中创建新闻文件?

umbraco - 如何创建使用外部数据源的 umbraco 小部件?

Umbraco 7 入门套件?

asp.net - 优化了从网站请求时返回 404 的 bundle

c# - 从 Xaml 文件创建数据对象

c# - HP Fortify 路径操作验证规则

visual-studio-2012 - Visual Studio 2012 : MVC, Umbraco 站点在调试时速度极慢

asp.net-mvc - 如何在 Umbraco Controller 中调用操作?

c# - 如何保持单元测试干燥并减少断言