gpt4 book ai didi

c# - EF Core 延迟加载非常慢

转载 作者:行者123 更新时间:2023-12-03 22:12:49 25 4
gpt4 key购买 nike

我做了一个小测试,启用懒惰 loading.optionsBuilder.UseLazyLoadingProxies().UseSqlServer(ConnectionString);
(使用 EF Core 2.1.4)

我正在循环使用和不使用仪器,这是我得到的结果

情况1

var instruments = db.instruments.OrderBy(t=>t.id).Include(t=>t.NavPro1).ThenInclude(t=>t.NavPro2).Take(200);

案例二
var instruments = db.instruments.OrderBy(t=>t.id).Include(t=>t.NavPro1).ThenInclude(t=>t.NavPro2).Take(200);

然后
   foreach (var i in instruments)
{
var props = i.NavPro1;
foreach (var prop in props)
{
sbPrintGreeks.AppendLine(prop.NavPro2.Name + " - " + prop.id + " - " + prop.Value);
}
}

需要 7s 才能获得 100k 行,无需延迟加载

延迟加载需要 160 秒才能获得 3k 行。

怎样做才能获得不错的性能?

最佳答案

这是一个普遍的问题,称为 N+1 问题。

这里发生的事情是,当您使用延迟加载时,您有更多的请求。

您使用Include的情况,您有一个巨大的请求可以为您提供所有数据 - 或者每个表可能有一个请求,因此在您的情况下是三个请求。这取决于数据的确切结构。

在延迟加载的情况下,您对仪器有一个请求,对于每个仪器,您都有另一个对 NavPro1 的请求。而对于每个 NavPro1元素,您还有另一个对 NavPro2 的请求。

因此,如果您有 1000 个仪器,并且每个仪器有 10 个 NavPro1,那么您现在有 1 + (1000 * (1 + 10)) = 11001 个请求,而不是最多三个请求。这很慢,期间。

关于c# - EF Core 延迟加载非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53132193/

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