Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非常大的对象集合的客户端视图。如何优化?_Java_Swing_User Interface_Ejb_Thick Client - Fatal编程技术网

Java 非常大的对象集合的客户端视图。如何优化?

Java 非常大的对象集合的客户端视图。如何优化?,java,swing,user-interface,ejb,thick-client,Java,Swing,User Interface,Ejb,Thick Client,我有三层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 l

我有三层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
}
类地址
{
字符串值
//其他属性
}
阶级秩序
{
公共字符串号
//这是复杂对象的集合,我需要第一个和最后一个对象来显示它的
//视图中的属性
公共列表getAddresses()
//其他属性
}
该视图是一个订单表:

号码|第一地址|最后地址|

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

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


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

建议为列表创建一个代理对象,该对象只获取列表元素的一小部分以及总计数,然后能够根据需要加载原始列表的其他部分

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

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

具体“如何”取决于您目前的方法

  • 您可以使用一些已经存在的编程模式 提及
  • 或者您可以在DB级别实现它,在这里您可以查询您的DB服务器, i、 e.根据所选的DBMS,您必须编写fetch
    以这样一种方式进行查询,即它们只检索所有查询的一部分 数据,比如
希望这有帮助

假设您使用a作为合适的
表格模型的视图
,则使用a查询数据库,并在结果到达时查询结果。为了简单起见,这只是以10块为单位获取随机数据。请注意,UI在数据累积时保持响应。

只有在服务(EJB端)提供API以获取数据页而不是一次获取整个列表时,使用
publish()
才有效。