ASP.NET - 加载具有重OO结构的网格数据

时间:2009-06-22 20:45:56

标签: architecture asp.net-3.5

假设我有一个相当复杂的对象。由于它非常复杂,因此从数据库加载需要一些时间。现在让我们说我的用户想要一个显示所有这些对象的网格,我知道如果我提供它,性能将是不可取的。我正试着把手指放在处理这个问题的最佳方法上。到目前为止,我有两个想法:

实现延迟加载:我真的不需要整个对象来显示网格。我不确定我是否想要这条路线,因为其他地方都需要加载整个对象,我不想彻底改变我的网格架构。

返回专门为我的网格定制的记录集:这是我倾向于的方式。基本上我会返回一个DataSet或简单的平面对象。我的存储过程可以执行数据关系以根据需要返回记录集。

我可能还想看其他方法吗?我之前没有做任何真正的网格,并且想确保我第一次就做好了。任何人都可以提出我的第二个想法的任何缺点吗?

2 个答案:

答案 0 :(得分:3)

我认为你的直觉是正确的,你的第二种方式更正确。当您的完整对象太大而无法加载它时,您可以尝试通过减少返回数据的大小来最小化整体负载。听起来你的对象也可能受益于一些重构,但是;如果加载真的那么大,那么将它重构成更小的组件会有什么好处吗?

答案 1 :(得分:1)

我会创建一个灯光实体来表示您需要在网格中显示的字段。

BUT!如果网格是只读的,我只会这样做。如果你需要从这个网格中改变对象,那么你最终会得到一个笨拙的翻译层,最终可能会对性能没有好处。在那种情况下,我会懒惰加载你的域对象。还有其他方法可以从数据提取中挤出一些更好的性能,例如数据库调整(索引,检查索引的碎片等等。只需在编写查询后检查执行计划)。

如果要返回这些重物的大型列表,也可以在proc中实现分页,这样一次只能获得10或20个,并且用户可以浏览多个页面。您可以为rownumber添加一列,而不是在代码中加载整个列表和页面,并将要作为参数提取的行号开头和结尾传递给proc。