java.awt.container.add(comp)瓶颈

java.awt.container.add(comp)瓶颈,java,performance,swing,user-interface,containers,Java,Performance,Swing,User Interface,Containers,我正在更新/维护现有的绘图程序。假设这是一个中等任务程序(能够处理少于一百万个节点+它们的转换)。在GUI中,有一个可视化显示图形的“视口”,还有一个侧面板,其中包含包含节点、过渡等摘要的选项卡 图形化部分工作正常,速度很快,但在运行探查器(YourKit)后,96-99.8%的时间用于创建节点的摘要选项卡/表格。因此,对于10000个节点,可视化生成图形需要一两秒钟,但填充表格需要几分钟 该过程的一个总结是:该选项卡收到模型已更改的通知,并获取节点列表。如果它需要更多的行,它会添加它们,否则它

我正在更新/维护现有的绘图程序。假设这是一个中等任务程序(能够处理少于一百万个节点+它们的转换)。在GUI中,有一个可视化显示图形的“视口”,还有一个侧面板,其中包含包含节点、过渡等摘要的选项卡

图形化部分工作正常,速度很快,但在运行探查器(YourKit)后,96-99.8%的时间用于创建节点的摘要选项卡/表格。因此,对于10000个节点,可视化生成图形需要一两秒钟,但填充表格需要几分钟

该过程的一个总结是:该选项卡收到模型已更改的通知,并获取节点列表。如果它需要更多的行,它会添加它们,否则它会重用或丢弃旧的行。然后,在创建行及其单元格后,它将填充它们

填充是每行一个节点,每行三个单元(JPanel)(每个单元包含一些信息)。每次在添加新行或要求该行检查更新时创建单元格时,它都会调用下面提供的“positionPanel”方法。布局管理器是SpringLayout。根据profiler,在生成此表的90%多的用户中,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); 
}

建议考虑使用它来实施。好处在于只渲染可见/更改的节点,而忽略其他节点
JGraph
使用类似的方法。概述了基本机制。请注意,这些好处只会增加到视图中,但您的分析表明这可能是值得的。

@Max根据文档,所讨论的类是在2006年7月18日制作的。他们有自己制作桌子的理由,我想这样他们就可以有复选框了。我将运行基准测试,看看JTable将如何处理负载,可能会转换为这种方式。@jdmaguire:为了方便起见,
Boolean.class
的默认值是
JCheckBox