我正在使用Visual Studio 2017,并试图使用C#和winform来制作一个在散点图中显示实时值的程序。如何在散点图中绘制超过50,000个值,节省计算机资源?
使用下面的源代码,无论何时发生事件并获得新值(每秒3〜5次),我都能够显示实时值。
valueArray通过GetRealTimeData函数不断获取新值,图表显示数组中的所有元素。
valueArray[valueArray.Length - 1] = Convert.ToDouble(GetRealTimeData().Trim());
Array.Copy(valueArray, 1, valueArray, 0, valueArray.Length - 1);
this.chart1.Series["Series1"].Points.Clear();
this.chart1.Series["Series1"].Points.DataBindY(valueArray);
不过,我有使用这个程序,这是它消耗大量计算机资源,即使它显示在图表中3000个值的问题。
我打算让图表代表50,000到100,000个值,但我认为它会耗尽太多的资源复制并在每次获得新值时显示旧值。
我想知道是否有任何功能或方法来做这种工作。如果我能得到一些建议或想法,我将不胜感激。
你为什么要将valueArray复制到valueArray中?那是什么spanArray,你为什么还需要复制自己呢? –
@Camilo Terevinto感谢您的评论。 valueArray现在可以包含3000个元素。我希望它在每次添加新值时显示其每个元素,因为如果它获得了超过3000个元素,它将删除最新的元素 - 这就是为什么我使用Array.Copy方法的原因。 spanArray是绘制另一个图表的另一个数组。当我第一次发布它时,我忘了忽略它。对不起! – maynull
这可能是最可怕的方式(性能明智)做到这一点。阵列不能很好地工作,你需要另一个数据结构 –