我正在更新/维护现有的图形程序。这被认为是一个中等程度的程序(能够处理少于一百万个节点+它们的转换)。在图形用户界面中,有一个可视化显示图形的“视口”,并且有一个侧面板,其中包含包含节点摘要,转场等的选项卡...java.awt.container.add(comp)瓶颈
图形部分工作现象,速度很快但运行分析器(YourKit)后,96-99.8%的时间用于创建节点的摘要选项卡/表格。因此,对于10,000个节点,需要一两秒的时间来生成可视化的图形,但需要几分钟才能填充表格!
该过程的摘要是:选项卡得到通知,模型已更改并获取节点列表。如果它需要更多的行,它会添加它们,否则会重新使用或丢弃旧的行。然后在创建行和它们的单元格之后,它将填充它们。
人口是每行一个节点,每行三个单元(JPanel)(每个包含一些信息)。每当添加新行或者要求检查更新时创建单元格时,它会调用下面提供的“positionPanel”方法。布局管理器是SpringLayout。据分析人士介绍,产生该表的90%的百分之九十一减一是“add(newPanel);”线。
任何关于速度在哪里以及如何改善的建议?
private void positionPanel(int row, int col) {
JPanel upPanel = this;
JPanel leftPanel = this;
String upSpring = SpringLayout.NORTH;
String leftSpring = SpringLayout.WEST;
if (row != 0) {
upPanel = cells.get(row - 1)[col];
upSpring = SpringLayout.SOUTH;
}
if (col != 0) {
leftPanel = cells.get(row)[col-1];
leftSpring = SpringLayout.EAST;
}
Cell newPanel = cells.get(row)[col];
//cells.get(row).set(col, newPanel);
add(newPanel);
layout.putConstraint(SpringLayout.NORTH, newPanel, cellSpacing, upSpring, upPanel);
layout.putConstraint(SpringLayout.WEST, newPanel, cellSpacing, leftSpring, leftPanel);
}
为什么不使用'JTable'? – tenorsax 2012-07-21 03:41:57
用于分析。 – trashgod 2012-07-21 04:15:42
@ Max这个课程是根据它的文档在2006年7月18日提出的。他们有自己制作桌子的理由,我想他们可以有复选框。我将运行基准测试来了解JTable如何处理负载,可能会改变为此。 – Lan 2012-07-23 02:49:43