我正在更新/維護現有的圖形程序。這被認爲是一箇中等程度的程序(能夠處理少於一百萬個節點+它們的轉換)。在圖形用戶界面中,有一個可視化顯示圖形的「視口」,並且有一個側面板,其中包含包含節點摘要,轉場等的選項卡...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