JChart2D表现

时间:2014-06-16 12:43:17

标签: java performance charts jchart2d

我正在绘制多达16条迹线,每条迹线有300个数据点,我每100毫秒连续更新100个数据点。因此,平均而言,我每100毫秒更新1600个数据点,并且达到了我可以实时绘制的点的极限。有没有什么方法可以提高绘图速度,或者点数确实达到了JChart2D可以达到的极限。

作为一个注释,JChart2D比其他库更好地用作实时应用程序的JFreeChart。 JFreeChart功能强大,但实时非常繁重。

每当向swing工作人员通知已添加数据时,我实际使用的循环如下:

            for (int l = 0; l < readcycles; l++){   
                sixteenBitNumber = data[l];      
                for (int k = 0; k < (SampledSignalPerPacket); k+=ScreenPointJump){
                    for (int o = 0; o < root.getChildCount(); o++){
                        for (int p = 0; p < graphnodes[o].getChildCount(); p++){
                            if (seriesindex[o][p] > ScreenSize){
                                seriesindex[o][p] = 0;
                            }
                            datapoint = (float)(sixteenBitNumber[signalnodes[o][p].signalIndex + NbOfSampledSignal*k])*10/32767;                               
                            trace[o][p].addPoint(seriesindex[o][p], datapoint);
                            seriesindex[o][p] = seriesindex[o][p] + ScreenPointJump;//seriesindex[o][p]++;
                        }                               
                    }
                }   

            }

其中trace已初始化为

public Trace2DLtd[][] trace =  new Trace2DLtd[4][4];

1 个答案:

答案 0 :(得分:0)

你可以这样做而不是addPoint线吗? 我可能错了..

                    datapoint = (float)(sixteenBitNumber[signalnodes[o][p].signalIndex + NbOfSampledSignal*k])*10/32767;                               
                    //trace[o][p].addPoint(seriesindex[o][p], datapoint);
                    avgX[o][p]+=seriesindex[o][p];  //Accumulate
                    avgY[o][p]+=datapoint;          //Accumulate
                    avgCounter[o][p]++;             //Keep track
                    if(avgCounter[o][p]==10){             //Done accumulating... plot average
                        trace[o][p].addPoint(avgX[o][p]/10, avgY[o][p]/10);   //Add average point
                        avgCounter[o][p]=0;  //Clear data
                        avgX[o][p]=0;        //Clear data
                        avgY[o][p]=0;        //Clear data
                    }
                    seriesindex[o][p] = seriesindex[o][p] + ScreenPointJump;//seriesindex[o][p]++;
                }                               
            }
        }   

    }