Asp.net I’;我不确定延迟加载模式在这里是否有用

Asp.net I’;我不确定延迟加载模式在这里是否有用,asp.net,design-patterns,lazy-loading,Asp.net,Design Patterns,Lazy Loading,我目前正在读一本关于网站编程的书,作者提到他将编写DLL对象以使用延迟加载模式。我认为,从概念上讲,我对延迟加载模式有些了解,但我不确定我是否理解作者实现它的方式是否有用 顺便说一句,在这里,我不是在问一般的惰性加载模式是否有用,而是在这本书实现它的方式中它是否有用: 1) 无论如何,当创建DLL对象时,将执行一个DB查询(通过DAL),该查询从各个列检索数据,并用它填充DLL对象的属性。由于其中一个字段(称为“L”)可能包含大量文本,作者决定仅在第一次读取该属性时检索该字段 A) 在我们的


我目前正在读一本关于网站编程的书,作者提到他将编写DLL对象以使用延迟加载模式。我认为,从概念上讲,我对延迟加载模式有些了解,但我不确定我是否理解作者实现它的方式是否有用

顺便说一句,在这里,我不是在问一般的惰性加载模式是否有用,而是在这本书实现它的方式中它是否有用:


1) 无论如何,当创建DLL对象时,将执行一个DB查询(通过DAL),该查询从各个列检索数据,并用它填充DLL对象的属性。由于其中一个字段(称为“L”)可能包含大量文本,作者决定仅在第一次读取该属性时检索该字段


A) 在我们的情况下,通过应用延迟加载模式,我们到底获得了什么?只是内存使用更少


B) 但另一方面,作者实现延迟加载模式的方式是否会导致CPU做更多的工作,从而需要更长的时间来完成,因为如果L与其他字段分开检索,那么我们的应用程序将需要对Sql Server进行额外调用以检索“L”,如果没有延迟加载模式,只需要对Sql Server进行一次调用,因为我们可以一次获取所有字段

顺便说一句——我意识到,在检索特定数据段需要大量计算的情况下,延迟加载模式可能非常有用,但在上面的示例中并非如此



thanx

如果DLL对象可以在不使用L字段的情况下使用(大多数情况下),这是有意义的。如果是这种情况,您的程序可以在等待L加载时处理可用数据。如果总是需要L,那么模式只会增加复杂性。我不认为这会大大减慢速度,特别是如果加载L比其他任何东西都需要更多的时间。但这只是一个猜测。使用延迟加载和不加载写入,然后查看哪个更好。

如果DLL对象可以在不使用L字段的情况下使用(大多数情况下),这是有意义的。如果是这种情况,您的程序可以在等待L加载时处理可用数据。如果总是需要L,那么模式只会增加复杂性。我不认为这会大大减慢速度,特别是如果加载L比其他任何东西都需要更多的时间。但这只是一个猜测。用延迟加载和不加载两种方式编写,然后看看哪一种更好。

我认为这在应用于正确的列时非常有用。例如,假设数据库中有一个表,
Customers
,在该表中有一列
CustomerPublicProfile
,这是一个非常大的文本列

如果您有一个屏幕(我们称之为
Customers.aspx
)显示客户列表(而不是
CustomerPublicProfile
列),那么您应该尝试避免填充该列

例如,如果您的
Customers.aspx
页面一次显示50个客户,则不必为每个客户获取
CustomerPublicProfilecolumn
。如果用户决定深入了解某个特定客户,那么您将获得
CustomerPublicProfile

关于B,是的,这确实会打N额外的电话,其中N是用户决定深入调查的客户数。但优点是,首先跳过该列可以节省大量不必要的额外开销。具体而言,您避免获取
CustomerPublicProfile
列的M-N值,其中M首先是在
customers.aspx
页面上检索到的客户数

如果在您的场景中,M的值接近N,则不值得。但是在我描述的情况下,M通常比N大得多,所以它是有意义的


赛义德·易卜拉欣·哈希米(Sayed Ibrahim Hashimi)

我认为这在应用于正确的列时非常有用。例如,假设数据库中有一个表,
Customers
,在该表中有一列
CustomerPublicProfile
,这是一个非常大的文本列

如果您有一个屏幕(我们称之为
Customers.aspx
)显示客户列表(而不是
CustomerPublicProfile
列),那么您应该尝试避免填充该列

例如,如果您的
Customers.aspx
页面一次显示50个客户,则不必为每个客户获取
CustomerPublicProfilecolumn
。如果用户决定深入了解某个特定客户,那么您将获得
CustomerPublicProfile

关于B,是的,这确实会打N额外的电话,其中N是用户决定深入调查的客户数。但优点是,首先跳过该列可以节省大量不必要的额外开销。具体而言,您避免获取
CustomerPublicProfile
列的M-N值,其中M首先是在
customers.aspx
页面上检索到的客户数

如果在您的场景中,M的值接近N,则不值得。但是在我描述的情况下,M通常比N大得多,所以它是有意义的


易卜拉欣·哈希米(Ibrahim Hashimi)

我最近遇到过这样一种情况,我在数据库中存储大型二进制对象。我当然不希望每次初始化DLL对象时都将这些加载到DLL对象中,尤其是当