简体   繁体   中英

Improving UI performance for displaying dynamic real-time data

I'm currently working on a deep reinforcement learning implementation. To see how the training progresses, I created the UI seen below. The textbox and both charts are update each time at the end of a while-loop. This loops is run inside a thread, which simulates a slot machine and trains a neural network. The performance profiler indicates that 87% of CPU usage are consumed by the main thread (running the UI) and the rest is left for the simulation thread.

Does anybody know of a good approach to dramatically shrink down the cost of the 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();
            }
        }
    }

edit: I suspended the charts' updates and call individually refresh now as soon as some more amount of data is added (based on modulo).

在此处输入图片说明

I would not plot individual (x,y) points, you can bind to an array of values. There is an example here How To Create A Line Chart From Array Of Values?

Add the points to a list.

Have a timer invalidate the view every 16.66 ms.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM