【发布时间】:2015-07-28 08:44:11
【问题描述】:
我对 C# 中 .NET 中的图表有一些疑问,我目前正在开发一个应用程序,该应用程序将实时显示来自串行端口的数据。
我正在使用 .NET 工具箱中带有样条系列的简单图表,我想要实现两个主要功能。
第一个 - 我希望即将到来的数据点显示在图表的右侧,我希望它们在新数据到来时向左移动,我不知道如何描述它正确,我希望你能明白主要的想法,因为我还不能发布图像。
我通过每次刷新图表时重新加载所有数据点来实现这种行为,起初它们都是空的,随着数据的到来,我将越来越大的值队列放在最后。
澄清一下代码可能是这样的:
chartAccelerationX.Series["XSeries"].Points.Clear();
dataPointTable = dataPointQueue.ToArray();
for (int i = 0; i < 1000; i++)
{
DataPoint dataPointX = new DataPoint();
if (1000 - dataPointTable.Length < i)
{
dataPointX.SetValueXY(i + 1, dataPointTable[i - 1000 + dataPointTable.Length].x);
}
else
{
dataPointX.IsEmpty = true;
}
chartAccelerationX.Series["XSeries"].Points.Add(dataPointX);
}
chartAccelerationX.Update();
它工作得很好,但正如我所说,我每次更新图表时都会创建所有 1000 个数据点(我每 100 毫秒执行一次),因此在性能方面可能是灾难性的(我需要总共有大约 6-8 个图表)并且它受到确切数量的 od 数据点的限制(这里为 1000 个)。
难道没有更简单的方法可以通过动态增加数据点数量和我想要的第二个功能来实现类似的目标 - 自动匹配滚动条,例如一次只显示 50 条记录?
我也一直在使用滚动条,但它只是设置为显示 1000 条记录中的 50 条记录,我现在可以滚动浏览所有这些空数据点。 我可能会在图表上出现确切数量的数据点后显示滚动条,并在每次添加数据时更新它,但也许有更简单的方法?
我希望你能理解我想说的话,我还在努力学习我的英语。
【问题讨论】:
-
您真的需要图表每秒更新 10 次吗?您可能不得不将其降低到每秒一次甚至更长的时间。
-
嗯,我想让它看起来很流畅,每秒最多有 50 个数据点,所以很高兴实时看到它,如果需要,我可以做到时间更长,但无论如何我想知道是否有更好的方法来实现这样的目标:)
-
当 .Net 图表有这么多数据点时,我并没有取得太大的成功。