我有课程ProcessMessage
和ProcessMessage
详情。有1对多关系,1 ProcessMessage
可以有很多ProcessMessageDetail
。我使用Entity Framework 6编写了代码,但运行速度非常慢。
优化它的任何提示?如果你在第3步看到它,我正在使用ToList()
。第1步和第2步是IQueryable
。
// 1
var query = UnitOfWorkAsync.Repository<ProcessMessage>()
.Queryable()
.Include(x => x.ProcessMessages)
.Include(x => x.TestDetail)
.AsNoTracking()
.AsExpandable()
.Where(Query(loggedProcess, status))
.Take(1000)
.AsQueryable();
// 2
query = query.OrderBy(sortBy + (reverse ? " descending" : "")).AsQueryable();
// 3
return query
.ToList()
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
public class ProcessMessage
{
public ProcessMessage()
{
ProcessMessages = new List<ProcessMessageDetail>();
}
public int ProcessMessageId { get; set; }
public int? LoggedProcessId { get; set; }
public int? ProcessMessageTypeId { get; set; }
public virtual LoggedProcess LoggedProcess { get; set; }
public virtual ICollection<ProcessMessageDetail> ProcessMessages { get; set; }
}
答案 0 :(得分:5)
最可能的罪魁祸首是第三步中的第一个ToList。
$('.masterRecords').on('click', function(){
console.log($(this).siblings('input').prop('id'));
});
点击此处查看说明:Does calling ToList multiple times effect performance?
如果您距离第一页太远,Skip和Take也可能存在问题,请查看:Entity Framerowk Skip/Take is very slow when number to skip is big