2009-07-18 34 views
0


我不知道延迟加载模式是否是这里

目前,我正在读一本书的网站编程和作家有用提到他将编写DLL对象使用延迟加载模式。我认为在概念上我有点理解懒加载模式,但我不知道,如果我理解它在作者实现它的方式的有用性

顺便说一句 - 这里我一般不要求延迟加载模式的用处,但无论是在方式有用这个特定书实现它:


1)反正,创建DLL对象时,一个DB查询经由DAL),其从各列,并与检索数据执行(它填充我们的DLL对象的属性。由于其中一个字段(称为“L”)可能包含相当多的文本,因此作者决定仅在该属性第一次被读取时才检索该字段。


A)在我们的情况下,究竟为什么我们通过应用延迟加载模式获得什么?内存使用量更少?


B)但是,在另一方面,不作者的方式实现延迟加载模式引起CPU做更多的工作,因此更长的时间才能完成,因为如果L被从其他字段分别检索,那么这将需要我们的应用程序额外调用Sql Server以检索“L”,而没有延迟加载模式,则只需要对Sql Server进行一次调用,因为我们将一次获得所有字段?!

顺便说一句 - 我知道延迟加载模式可以是在其中检索数据的特定部分将需要繁重的计算的情况下非常有利的,但是这不是在上面的例子


感谢名单

的情况下

回答

1

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

如果您有一个显示客户列表(但不包括CustomerPublicProfile列)的屏幕(我们称之为Customers.aspx),那么您应该尽量避免填充该列。

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

关于B,是的,这确实让ň额外要求,其中ñ是用户决定深入到客户的数量。但优点是您首先在跳过列时节省了大量额外的不需要的开销。具体而言,您可以避免在CustomerPublicProfile列中获得M-N值,其中M是在Customers.aspx页面上检索的客户数量。

如果在你的场景M有一个值接近N那么它是不值得的。但在我描述的情况下M通常比N大得多,因此它是有意义的。

赛义德·易卜拉欣·哈希米

+0

那么在我的特殊情况下,延迟加载模式只能为我节省一些内存? – SourceC 2009-07-18 21:26:07

2

如果DLL对象可以在没有L字段的情况下使用(大部分时间),这是有道理的。如果是这种情况,您的程序可以在等待L加载时使用可用数据。如果总是需要L,那么该模式会增加复杂性。我认为这不会显着减慢速度,特别是如果加载L需要更多时间。但这只是一个猜测。写延迟加载和没有然后看哪个更好。

1

我有过这样最近我在那里在数据库中存储大型二进制对象的情况。我当然不希望每次初始化时都将这些加载到DLL对象中,特别是当对象是集合的一部分时。所以有时候懒加载一个字段是有道理的。但是,我不认为你可以遵循任何一般规则 - 你知道你的数据以及它将如何被访问。如果您认为一次访问数据库并使用更多内存会更有效率,那么您应该这样做。