1

いくつかのグラフを同時にプロットしようとしています。それぞれが属性を表し、それぞれが独自のデータ項目シリーズを含むいくつかのオブジェクトの結果を表示します。TimeSeriesのadd(...)またはaddOrUpdate(...)メソッドを使用すると、パフォーマンスが非常に悪くなります。最大16,000アイテムをプロットする時間は約60秒です。パフォーマンスの問題について読みました-http://www.jfree.org/phpBB2/viewtopic.php?t =12130&start=0-しかし、私の場合、何らかの理由でそれがはるかに悪いように思えます。

  1. これが本当にモジュールから絞り出せるパフォーマンスであるかどうかを理解したいと思います(Windowsを実行している2.5GHzマシン-私はそれを疑っています)。
  2. この点でアプリケーションを高速化するにはどうすればよいですか?

コードの基本バージョンは次のとおりです(すべて専用スレッドで実行されることに注意してください)。

/* attribute -> (Object -> graph values) */
protected HashMap<String,HashMap<Object,Vector<TimeSeriesDataItem>>> m_data = 
  new HashMap<String,HashMap<Object,Vector<TimeSeriesDataItem>>>();

public void loadGraph() {
    int items = 0;
    for (String attr : m_data.keySet()) 
        for (Object obj : m_data.get(attr).keySet())
            for (TimeSeriesDataItem dataItem : m_data.get(attr).get(obj))
                items++;
    long before = System.currentTimeMillis();

    // plot each graph
    for (String attr : m_data.keySet()) {  
        GraphXYPlot plot = m_plots.get(attr);
        plot.addToObservation(m_data.get(attr));
    }

    System.err.printf("Time for plotting %d items is:  %d ms", items, System.currentTimeMillis()-before);
    // => Time for plotting 16540 items is:  59910 ms
}

public void addToObservation(HashMap<Object, Vector<TimeSeriesDataItem>> plotData) {
    for (Object obj : plotData.keySet()) {
        SeriesHandler handler = m_series.get(obj);
        if (handler != null) {
            TimeSeries fullSeries = handler.getFullSeries();
            TimeSeries periodSeries = handler.getPeriodseries();
            for (TimeSeriesDataItem dataItem : plotData.get(obj)) {
                fullSeries.add(dataItem);
                periodSeries.add(dataItem);
            }
        }
    }
}

どうもありがとう !

4

1 に答える 1

1

詳細がない場合は、いくつかの一般的な最適化のいずれかを検討する必要があります。

  • ここでsetNotify(false)提案されているように、を呼び出します。

  • ここで説明するように、すでに計算された値をキャッシュします。

  • ここに示すように、ページング戦略を採用します。

  • average/time-unit値の要約をグラフ化します。ChartEntityに見られるものに基づいてChartMouseListener、隣接するパネルに展開されたサブセットを表示します。

于 2012-12-20T18:05:47.380 に答える