Linq查询的性能非常慢

问题描述 投票:-1回答:2

我有700条记录,这些记录的不同列具有字符串类型,我想使用此代码选择所有记录:

public virtual object GetAll()
{
    var AllList = unitOfWork.Repository<STUser>().GetAll().ToList();

    return (from STUser in AllList
            select new
            {
                STUser.ID,
                FullName = STUser.HRPerson.LastName,
                STUser.USR,
                STUser.Active,
                STUser.TryCount,
                STUser.Description           
            }).OrderByDescending(i => i.ID).ToList();
}

但是,查询执行非常慢。我删除了FullName = STUser.HRPerson.LastName,行,它的执行速度非常快。Join子句减慢了速度。

我为列表中的每一行运行了SQL事件探查器,看起来它执行了700次查询。

请帮助我。

c# linq
2个回答
0
投票

我想分享一个想法:(我不熟悉该平台)

这怎么办:

public virtual IEnumerable<YourDataObject> GetAll()
{
    var result = from STUser in unitOfWork.Repository<STUser>().GetAll() // << what is GetAll()??
                 orderby STUser.ID
                 select new YourDataObject // <-- you should create a data holder class for it
                 {
                    STUser.ID,
                    FullName = STUser.HRPerson.LastName,
                    STUser.USR,
                    STUser.Active,
                    STUser.TryCount,
                    STUser.Description
                 });

    return result;
}

通过在创建数据持有者类之前进行排序,您可能在数据库端使用优化。


0
投票

您可以尝试在查询中使用.AsNoTracking()。

从Microsoft文档-

在只读方案中使用结果时,没有跟踪查询很有用。由于不需要设置更改跟踪信息,因此执行起来更快。如果您不需要更新从数据库中检索到的实体,则应使用无跟踪查询。您可以将单个查询交换为无跟踪。

此处有更多-https://docs.microsoft.com/en-us/ef/core/querying/tracking

© www.soinside.com 2019 - 2024. All rights reserved.