我什么时候应该使用延迟加载以及它应该有多懒惰

Wii*_*axx 3 c# lazy-loading mvvm

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

作为讨论的一个例子,让我们使用一个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
Run Code Online (Sandbox Code Playgroud)

*根据座右铭“仅加载您需要的内容” ,标记我将延迟加载的对象。

编辑

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

我想知道为什么大多数人都劝阻懒惰加载,是因为他们不能使用它还是它有非常糟糕的缺点?

ry8*_*806 5

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

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

如果您使用 .NET 4.0(及更高版本),这Lazy<T>可以帮助降低实现延迟加载的一些复杂性(它也为您处理线程安全!)此代码项目文章可以帮助实现