gpt4 book ai didi

c# - 即使生成的 SQL 很快, Entity Framework 也会随着添加的额外连接而逐渐变慢

转载 作者:太空狗 更新时间:2023-10-30 01:03:25 25 4
gpt4 key购买 nike

我们有 18 个表连接,这对于 ERP 系统来说是典型的。连接是通过 LINQ over Entity Framework 完成的。

随着加入的加入越来越多,加入变得越来越慢。返回结果集很小(15 条记录)。 LINQ 生成的查询是通过 SQL Profiler 捕获的,当我们通过 Microsoft 管理控制台运行它时,它非常快:10 毫秒。当我们通过 C# LINQ-over-EntityFramework 运行它时,它需要 4 秒。

我猜发生了什么:将表达式树编译成 SQL 所需的时间是总计 4 秒中的 2 秒,我猜另外 2 秒用于将 SQL 结果集转换为实际的 C# 类。它也没有连接到 Entity Framework 的初始化,因为我们之前运行了一些查询并且重复调用这个连接产生相同的 4 秒。

有什么办法可以加快速度吗?否则我们正在考虑放弃 Entity Framework,因为它绝对效率低下......

最佳答案

如果有帮助的话,我遇到了一个严重的性能问题,即在原始 SQL 中花费 1-2 秒的简单查询通过 EF 花费了大约 11 秒。

我不再使用...

List<GeographicalLocation> geographicalLocations = new SalesTrackerCRMEntities()
.CreateObjectSet<GeographicalLocation>()
.Where(g => g.Active)
.ToList();

通过 EF 花了大约 11 秒,使用...

var geographicalLocations = getContext().CreateObjectSet<GeographicalLocation>()
.AsNoTracking()
.Where(g => g.Active).ToList();

用了不到 200 毫秒

这样做的缺点是它不会加载相关实体,因此您必须在之后手动加载它们,但它提供了如此巨大的性能提升,这是非常值得的(至少在这种情况下)。

您必须单独评估每个案例,看看额外的速度是否值得额外的代码。

关于c# - 即使生成的 SQL 很快, Entity Framework 也会随着添加的额外连接而逐渐变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com