2012-08-16 91 views
2

我希望这个问题等都值得,但我会试试看......提高性能与许多条目

我有一个相当复杂的GUI,我期待以增加整体性能一点。我偶然发现了一些填充了大量条目(高达10000行)的组合框。 所有摆动元素的创建已经过优化,所以它们通常只初始化一次。但是,看起来有点内存密集,比如说,10个条目总是在背景中的10个组合框模型。

我已经实现了搜索功能,所以用户可以键入'B',并且列表跳转到以'B'开头的第一个条目(并且如果添加更多的字符,则进一步细化)。但是这并不会改变模型,只是重置选定的索引,所以列表仍然包含所有条目。

我的问题是:

是否有关于如何组合框内处理很多项的最佳做法? 并且从用户的角度来看,您是宁愿显示所有条目,还是仅仅按下按键后的第一个100和其他要求?

还是要问一个更具体的问题:

是更好地保持一个大的ComboBoxModel在内存中,或创建一个小的(约100个条目),每个用户进入一个新的关键时期?

感谢您的建议和意见!

回答

4

我会添加例如第一个100和另一个项目“More ...”或“Show All”。当用户点击该项目时,所有的10k记录都被加载。或者,如果用户开始输入,我会减去适当的范围(但不要超过100),并将它们显示在列表中。

+0

感谢您的意见,我会实现类似于 – moeTi 2012-08-17 07:30:24

1

您的应用程序使用多少ram?最初加载是否花费太长时间?

现在桌面/笔记本电脑的内存很便宜。如果您的应用程序是专用/专业应用程序,又名用户将在前台密集使用它,您希望为用户提供速度,并且响应能力高于一切。如果它像即时通讯工具那样,您可能希望保持其RAM指纹低。

我的建议是将所有内容都保存在内存中,前提是适度的2012计算机版本可以处理它。

编辑:从可用性的角度来看,StanislavL的建议也吸引我。

+1

这是一个用户前端,所以如果它是开放的,它将用于前台。它总计大约200mb的RAM。对于今天的机器来说不是太多,但是总有改进空间 – moeTi 2012-08-16 09:21:18

+0

提高内存使用率可能意味着放弃速度。如果你可以逃避(请求式加载方法不明显),那就去做吧。 – Buffalo 2012-08-16 09:27:56

1

有这么多的项目ComoBox是不适合的。您的智能搜索的想法很好,但您应该通过不预先填充CB来改进它,而是在用户输入时以异步方式加载数据并启动至少1或2个字符。

+0

组合框是来自客户的请求,所以更改是不可能的(我也喜欢从组合框中选择预定义的值)。但我喜欢异步人群,大多数数据都在DB中,因此搜索很容易 – moeTi 2012-08-16 09:26:14

2

10000条目不应显示在JComboBox中。 您可以使用自动完成的JTextField。 Swingx提供了一个实用程序来执行此操作:AutoCompleteDecorator

您还可以在JXList(再次来自swingx)中显示数据,并使用JTextField过滤其内容。

JList是一个已经过优化的组件。只有显示的数据(在scrollpane视口中可见)才真正绘制。对于内存优化,flyweight pattern用于单元渲染,只有一个ListCellRendeter用于绘制所有单元。

如果由于某些原因,您必须使用JComboBox。请注意,JCombobox使用JList在Popmenu上显示数据,因此可以获得上述解释的好处。

为了提高您的模型的内存,您可能会考虑延迟加载数据。但是,由于您还需要自动完成功能,所以它有点复杂。您的自动完成将不得不在持续的数据中进行。

+0

组合框是一个客户请求,但也许我可以讨论。我不喜欢“自动完成”文本框,因为您必须知道您要查找的内容。在组合框中,您可以输入一些字母并缩小条目并从剩菜中选择 – moeTi 2012-08-16 09:47:12