我希望这个问题等都值得,但我会试试看...
我有一个相当复杂的GUI,我期待以增加整体性能一点。 我偶然发现了一些组合框已填充了大量条目(高达10000行)。 所有摇摆元素的创建已经进行了优化,所以它们通常只初始化一次。 但似乎有点内存密集型有,比方说,在后台10K条目始终为10个的组合框模型。
我实现了一个搜索功能,使用户可以键入“B”和列表跳转到第一个条目以“B”(和进一步细化,如果增加了更多的字符)。 但是,这不会改变模型,只是重新选择的指数,因此列表仍然包含所有条目。
我的问题是:
是否有关于如何组合框内处理很多项的最佳做法? 而从用户的观点,你愿意显示所有条目,或只是第100和其他人的需求被按下一个键后?
或问一个更具体的问题:
它是更好地保持一个大的ComboBoxModel在内存中,或创建一个小的(约100个条目),每个用户进入一个新的关键时期?
感谢您的意见和建议!
我想补充如第100和一个多项目“更多...”或“全部显示”。 当用户点击该项目的所有10K记录被加载。 另外,如果用户开始输入我会减去适当的范围内(但同样不超过100),并将其显示在列表中。
10000项不应该显示的JComboBox。 您可以使用一个JTextField
带有自动完成。 Swingx提供了一个工具来做到这一点: AutoCompleteDecorator 。
你也可以显示在数据JXList (再次从swingx),并用一个JTextField过滤其内容。
JList的是已经进行了优化的组件。 只有显示的数据(在滚动视可见)真绘。 而对于内存优化的轻量级的模式用于单元格呈现,只有一个用于绘制所有单元ListCellRendeter。
如果由于某种原因,你必须使用的JComboBox。 需要注意的是JComboBox使用的JList显示在Popmenu数据,因此它的好处如上所述。
对于模型的改善记忆,你可以考虑懒洋洋地加载数据。 但是,这是一个有点复杂,因为你也想自动完成功能。 您自动完成将在持续数据seacrh。
多少RAM,使用你的应用程序? 它需要很长时间才能开始加载?
台式机/笔记本内存非常便宜时下。 如果您的应用程序是一个专用/专业之一,又名用户将被集中使用它在前台,你要提供上述各种用户的速度和响应能力。 如果是类似的即时通讯工具,你想保持它的RAM指纹低。
我的建议是保存在内存中的一切,提供适度的2012计算机构建能够处理它。
编辑:从一个可用性点,StanislavL的建议吸引我的。
有了这么多的项ComoBox是不适合的。 你的智能搜索的想法是好的,但是你应该不会预先填充的CB改进,而是当用户键入asynchrounously加载数据,并开始至少1个或2个字符。