什么时候应该使用惰性加载,它应该有多懒

本文关键字:什么时候 加载 | 更新日期: 2023-09-27 18:19:15

我想问一下延迟加载。我经常读到我们应该否认它,但为什么我要加载可能从未使用过的数据?

作为一个讨论的例子,让我们使用Customer:

-Id
-Title
-FormOfAddress
-FirstName
-LastName
-Picture*
-DOB
-Phone
-Mobile
-Address*/Billing Address*
    -Id
    -Street
    -Number
    -Country*
        -Id
        -Name
        -Zipcode
-Bankdetails*
    -Id
    -AccountHolder
    -AccountNumber
    -Bank*
        -Id
        -Name
        -BankCode
    -IBAN

*标记了我将根据座右铭"只加载您需要的"惰性加载的对象。

编辑

好吧,我的问题似乎不够清楚,所以这里可能是我想知道的更好的表述:

我想知道为什么大多数人劝阻使用lazy load,是因为他们不能使用它还是它真的有不好的缺点?

什么时候应该使用惰性加载,它应该有多懒

通常使用延迟加载作为一种调优机制,例如,如果您正在加载所有数据并且没有注意到任何性能问题,那么事实是您可能不需要担心延迟加载模式(稍微)增加的复杂性。

但是,如果您注意到性能问题,那么您应该查看一下模式,确定最常用的数据(正如您在上面注意到的带有*标记的数据),然后只加载该数据。您需要进行一些性能分析,以确定当您确实需要额外数据(未标记*的字段)时,是否会降低系统性能/减慢同一域中的任何其他操作(依赖于或依赖于您正在描述的操作)

如果你使用的是。net 4.0(或更高版本),Lazy<T>可以帮助你减少一些实现延迟加载的复杂性(它也会为你照顾线程安全!)这篇代码项目文章可以帮助实现

延迟加载是有原因的。如果你知道你不会经常使用你的特定数据,那就把它加载为lazy。如果您不完全熟悉延迟加载,则应避免使用它,因为这可能会导致错误。大部分是专门针对特定技术的,我只是在考虑jpa hibernate。在Lazy Init的情况下,你应该确保你不想重载你的数据太频繁,因为你可能会遇到性能问题,但我想这就是它。