小程序延迟加载:延迟加载 vs急切加载(how do you spell eager)

在什么情况下,急于加载比懒惰加载更有益?

实体框架中的延迟加载是加载和访问相关实体时发生的默认现象。然而,急切加载指的是强制加载所有这些关系的做法。

我问这个,因为很明显,延迟加载对资源更友好,即使我们使用ToList()方法,我们仍然可以利用延迟加载行为。

但是,我想也许延迟加载会增加对实际数据库的请求数量,也许这就是为什么有时开发人员使用Inlcude方法来强制加载所有关系。

例如,在 MVC 5 中使用 Visual Studio 自动脚手架时,在控制器中自动创建的 Index 方法始终使用 Eager Loading,我一直有一个问题,为什么 Microsoft 在这种情况下使用 Eager Loading 默认值。

如果有人向我解释在什么情况下渴望加载比懒惰加载更有益,我将不胜感激,为什么我们使用它,而有更多的资源友好的懒惰加载?

108

我认为对这样的关系进行分类是很好的

何时使用热切加载

在一对多关系的“一侧”中,您确定与主要实体一起使用。如文章的用户属性。产品的类别属性。

一般当关系不是太多,急于加载将是很好的做法,以减少服务器上的进一步查询。

何时使用延迟加载

几乎在一对多关系的每一个“收集方”上。如用户文章或类别的产品

你完全知道你不会立即需要一个属性。

注意:像 Transcendent 说的那样,延迟加载可能存在处置问题。

38

Eager Loading:Eager Loading 可帮助您一次加载所有需要的实体。即,相关对象(子对象)随其父对象自动加载。

何时使用:

当关系不是太多时,请使用 Eager Loading。因此,Eager Loading 是减少服务器上进一步查询的良好做法。

当您确定将在各处使用与主实体相关的实体时,请使用 Eager Loading。

延迟加载:在延迟加载的情况下,相关对象(子对象)不会自动与其父对象一起加载,直到它们被请求。默认情况下,LINQ 支持延迟加载。

何时使用:

当您使用一对多集合时,请使用 Lazy Loading。

当您确定没有立即使用相关实体时,请使用“延迟加载”。

注意:实体框架支持三种方式加载相关数据-渴望加载,延迟加载和显式加载。

29

延迟加载将产生多个 SQL 调用,而 Eager 加载可能会通过一个“更重”的调用(使用连接 / 子查询)加载数据。

例如,如果您的 Web 和 sql 服务器之间有一个高 ping,您将使用 Eager 加载,而不是使用懒惰加载 1-by-1 加载相关项目。

16

考虑的情况

public class Person{
    public String Name{get; set;}
    public String Email {get; set;}
    public virtual Employer employer {get; set;}
}
public List<EF.Person> GetPerson(){
    using(EF.DbEntities db = new EF.DbEntities()){
       return db.Person.ToList();
    }
}

现在,在调用此方法后,您不能再延迟加载Employer实体。为什么?因为db对象被处置。所以你必须做Person.Include(x=> x.employer)强制加载。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(716)
靶向cd19:Android Studio-API级别为19的RecyclerView(API19)
上一篇
Absolute layout:替代Android中的AbsoluteLayout
下一篇

相关推荐

  • 软件系统安装调试方案:DAQ软件替代方案(ni daq express)

    关于软件系统安装调试方案的问题,在ni daq express中经常遇到,我想获得 NI USB-6008 DAQ,但我不想在我的钱包里烧一个洞购买 LABView。是否有任何替代 LABView 作为此卡的 DAQ 软件?是否可以使用 Visual C++ Express 或像 BioMOBIUS 这样的 OS 软件与此 DAQ 卡?…

    2024-01-27 00:45:11
    0 94 98
  • Ar per:无法在AR支持的设备中创建AR会话

    关于Ar per的问题,在ar supported phones中经常遇到,我正在尝试在我的应用程序中实现 AR Core 功能。这在少数设备中工作正常 (支持 AR 核心-一加 6T 和小米 Redmi Note 8)。在少数设备中不起作用 (也支持 AR 核心-一加 7T 和三星 M31s)。…

    2024-01-17 12:32:53
    0 45 80
  • Fluent多相流实例教程:节点-将fluent-ffmpegRTSP转换为Kinesis视频流PutMediaAPI

    关于Fluent多相流实例教程的问题,在node-fluent-ffmpeg中经常遇到,我想做的是从 RTSP-& gt;FFMPEG-& gt;MKV-& gt;PutMedia 在低延迟的流中。…

    2024-03-07 11:24:43
    0 81 47
  • 股指期货模拟交易软件:您可以在交易视图中使用pine脚本来自动交易Tradovate期货吗

    关于股指期货模拟交易软件的问题,在tradovate automated trading中经常遇到,我有一个 pine 脚本编写,我能够支持测试。现在我只想设置一个 autotrading bot 在 Tradovate 中 24 / 5 交易期货。是否有一个平台链接 2?我已经有能力在 Tradovate 的 Tradovate 上手动执行交易在 Tradovate 视图 (所以他们被链接)。我只需要自动化我的脚本。…

    2024-03-09 16:23:34
    0 37 90
  • 小程序页面标题:从 /r/listenToThis解析歌曲标题以获取IFTTT小程序

    关于小程序页面标题的问题,在r/listentothis中经常遇到,我有一个歌曲标题的数组,来自this subreddit,看起来像这样:…

    2024-04-05 14:39:59
    0 37 81
  • Bloating:ARM故意膨胀编译代码 (arm bloating)

    关于Bloating的问题,在arm bloating中经常遇到,在Fastest Cortex M0+ Thumb 32x32=64 multiplication function?中处理问题时,我编写了以下 C 函数来查看它将如何编译:…

    2024-01-30 10:20:22
    0 81 68
  • Vi j a:将ffrom16.0版本vi转换为15.0vilabviewvi

    关于Vi j a的问题,在labview versions中经常遇到,请帮助我将 16.0 vi 转换为 15.0 版本 vi。无法在 15 labview 中打开 16 版本,请帮助我。…

    2024-03-13 08:13:22
    0 80 16
  • Pe pero:测试 PE文件(file pe)

    关于Pe pero的问题,在file pe中经常遇到,任何人都可以帮助我在哪里可以找到示例便携式可执行文件来测试我的小反病毒项目?任何值得信赖的 PC 中 PE 文件的参考将非常有帮助。我正在 Windows 平台上进行测试。…

    2023-12-17 07:50:03
    0 77 84

发表评论

登录 后才能评论

评论列表(10条)