何时应该使用延迟加载以及延迟加载的程度应该怎样?

3

我想询问关于延迟加载的问题。我经常看到我们应该拒绝使用它,但为什么要加载可能永远不会被使用的数据呢?

作为讨论的示例,让我们使用一个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<T>。 - blindmeis
@blindmeis 我想知道为什么大多数人反对懒加载,是因为他们不会使用它还是因为它真的有很大的缺点。我错过了什么吗? - WiiMaxx
由于懒加载模式和其他任何模式一样,它的使用效果取决于你的实际应用。根据你提供的信息有限,没有人能告诉你是否应该使用它。但我可以说的是,这种模式绝对可以被用于好的方面。 - Nikita B
@wiimaxx 我会说这取决于你是否为客户准备了一个视图,并且有一个按钮可以打开银行详细信息,那么懒加载银行详细信息就很好。但是如果视图已经包含了银行详细信息,那么懒加载就没有效果。 - blindmeis
2个回答

4
常见的调优机制是使用延迟加载模式,例如,如果您正在加载所有数据并且没有注意到任何性能问题,那么事实上,您可能不需要担心(稍微)增加了延迟加载模式的复杂性。
但是,如果您注意到性能问题,则应查看该模式,识别最常用的数据(如上所述,标有*的数据),仅加载该数据。您需要进行一些性能分析,以确定您确实需要额外的数据(未标记为*的字段)的时间是否会降低系统的性能/减慢依赖于或依赖于您描述的操作的同一域中的任何其他操作(取决于该操作)。
如果您正在使用.NET 4.0(及更高版本),则Lazy<T>可以帮助减少实现延迟加载时的某些复杂性(它还为您处理线程安全!)此Code Project文章可以帮助实现

0

存在进行懒加载的原因。如果你知道你不会经常使用特定的数据,那么惰性加载就是正确的选择。如果你不是非常熟悉惰性加载,那么最好避免采用它,因为可能会引起错误。通常这适用于特定的技术,我只是考虑了JPA Hibernate。在惰性初始化的情况下,你应该确保你不会过于频繁地重新加载数据,否则你可能会遇到性能问题,但我想这就是它的全部。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接