Java JTable频繁更新?
我正在编写一个能够处理频繁更新的JTable。 通常,这个JTable有大约1000行数据,而且有些列会经常更新,因为它们的价值来源于在市场时间内移动很多的股票价格。
我面临的问题是当大量的行(例如80%)正在更新时,JTable变得非常慢,持续20-30秒左右,分析器显示EDT线程非常繁忙,处理tableChanged调用。
我尝试通过1)压缩fireTableCellUpdated来折叠更改2)如果 50行更改,则为整个表调用fireTableDataChanged。
它更好,但是当频繁更新时仍然很慢,我的理解是fireTableDataChanged也很慢。 因此,如果数据更新频繁,将频繁调用fireTableDataChanged,并且GUI会感觉迟钝。
有没有经验丰富的人可以推荐使用fireTableRowsUpdate,fireTableDataChanged和fireTableStructureChanged的最佳实践,以提高GUI的活力和性能? 如果你有指向解决这个问题的示例代码的指针,它会更好。
非常感谢
安东尼斯
我已经做到了,事实上,即使在强大的设置上,默认的JTable性能也非常糟糕。 但是所有希望都不会丢失:使用(相当)一些技巧可以获得可接受的表现。
基本上,Oracle有一个专门为此目的的教程称为“圣诞树”。
在这里,您将“如何创建经常更新的JTable,表现良好”:
http://www.oracle.com/technetwork/java/christmastree-138396.html
我发现真正令人惊讶的一件事就是不断显示所使用的内存:你可能想要这样做。
你会惊讶于默认的JTable产生了多少不必要的垃圾,减慢了所有的速度,并且当然更频繁地使用GC触发方式。
然后开始实现我给你的链接中给出的所有技巧,你会发现一切都运行得更顺畅。 我现在运行非常复杂并且“不断更新”JTable,现在一切都很好:)
但是,除了最简单的情况和少量的数据之外,默认的JTable实现真的非常糟糕。
- 将Ruby on Rails项目转换为JRuby on Rails项目
- 使用自定义视图解析器和自定义视图的Spring MVC AJAX和JSON
- 如果使用Derby Db不存在表,如何创建表
- 为什么没有OutOfMemoryError子类?
- OptaPlanner:ValueSelector无法使用ValueRangeType.FROM_PLANNING_ENTITY_PROPERTY
- 为什么在Integer类的Integer.valueOf方法中使用assert?
- Guava:Cacheloader.load()如何工作
- 如何在context.xml中存储字符串值
- BeanUtils.cloneBean()深层复制