2017-08-17 8 views
0

現在、深い強化学習の実装を進めています。トレーニングの進行状況を確認するために、私は以下のUIを作成しました。テキストボックスと両方のグラフは、whileループの最後に毎回更新されます。このループは、スロットマシンをシミュレートし、ニューラルネットワークを訓練するスレッド内で実行されます。パフォーマンスプロファイラは、CPU使用率の87%がメインスレッド(UI実行中)によって消費され、残りはシミュレーションスレッド用に残されていることを示します。動的リアルタイムデータを表示するためのUIパフォーマンスを改善する

誰でも、UIのコストを大幅に削減するための良いアプローチを知っていますか?

private delegate void AppendChartCallback(Chart chart, double x, double y); 
    private void AppendChart(Chart chart, double x, double y) 
    { 
     if (chart.InvokeRequired) 
     { 
      AppendChartCallback d = new AppendChartCallback(AppendChart); 
      Invoke(d, new object[] { chart, x, y }); 
     } 
     else 
     { 
      chart.Series[0].Points.AddXY(x, y); 

      if (chart.Series[0].Points.Count % 20 == 0) 
      { 
       chart.Refresh(); 
      } 
     } 
    } 

編集:私はチャート更新を一時停止し、(モジュロに基づく)とすぐにデータのいくつかのより多くの量が追加されるようになりましリフレッシュ個別に呼び出します。

enter image description here

+0

グラフへのポイントを追加する呼び出しが再描画を引き起こしていると仮定します。どのチャートコントロールを使用していますか?系列が更新されるたびにグラフが定期的に転送されるように、再描画を延期することは可能ですか? – Charleh

+1

一番最初に試してみると、電話をバッチしてください。おそらくすべての単一の値を即座にディスパッチする必要はないでしょう。それは多くのサイクルを要します。 –

+0

コントロールの使用 System.Windows.Forms.DataVisualization.Charting.Chart – MarcoMeter

答えて

0

私は、個々の(x、y)の点をプロットしません、あなたは、値の配列に特異的に結合することができます。ここに例がありますHow To Create A Line Chart From Array Of Values?

+0

DataBindYがポイントを置き換えます。データは動的に成長するので、これは私が探している行動ではありません。 – MarcoMeter

0

リストにポイントを追加してください。

16.66msごとにビューを無効にするタイマーを用意してください。

関連する問題