非常大的对象集合的客户机视图.如何优化



我有一个3层EJB应用程序,我需要在一个厚客户机(桌面Java应用程序)上创建一个视图,该视图显示一个非常大的对象集合(超过5000个订单)。每个对象都有子属性,它们也是复杂对象,例如:

class Address
{
 String value 
 // other properties
}
class Order
{
 public String Number
 // this is collection of complex object and I need first and last object to show it's
 // properties in view
 public List<Address> getAddresses()
 // other properties
}

视图是一个Orders表:

Number | FirstAddress | LastAddress |…

我的第一次尝试是加载完整的订单列表(没有子属性),然后在需要显示时动态下载子对象。但是当我有10000个订单并开始快速滚动时,UI变得无响应。

然后我尝试加载所有需要在表中显示的订单和所有子订单,但UI变得非常沉重和缓慢,可能是因为内存成本)。它根本不是厚客户端,因为我几乎从db下载所有的数据。

解决这个任务的最佳实践是什么?

假设您使用JTable作为合适的TableModel的视图,使用SwingWorkerpublish()在结果到达时查询数据库。为简单起见,本例仅以10个为块获取随机数据。注意,当数据累积时,UI保持响应。

遵循值对象数据传输对象模式。只发送你真正需要的东西。而不是发送一个图形的领域对象,只是创建一个或多个"愚蠢的"平面对象(包含简单的属性)每个视图。

我建议实现某种分页,换句话说,您必须实现一种机制,仅检索所有数据的一小部分,并在不同的页面中逐个块地显示它们。

确切地"如何"取决于你目前的方法。

  • 你可以使用一些类似的编程模式提到
  • 或者你可以在DB级实现它,在那里你查询你的DB服务器,例如,根据所选择的DBMS,您必须编写fetch
    以这样一种方式进行查询,即它们只检索所有数据的一部分

希望这对你有帮助!

建议为您的列表创建一个代理对象,该对象仅获取其元素的一小部分,以及总数,然后有能力按需加载原始列表的其他部分

相关内容

  • 没有找到相关文章

最新更新