我有一个快速的收购显示在一个SciChart和应用程序,应该运行很长一段时间而不消耗PC的所有RAM。
我没有必要在图表上显示所有点,而只是显示某个最近的时间间隔,因此当我不想再显示那些时,我想从系列中删除点。
我尝试了XyDataSeries.RemoveRange方法,但是当我调用它时,我得到以下异常:
System.NotSupportedException: 'Remove is not a supported operation on a Fifo Buffer'
你有什么建议来克服这个问题?
解决此问题的唯一方法是不使用FIFO缓冲区并手动使用DataSeries的Insert / Append和Remove函数来维护一定数量的点。
例如
public class Foo
{
private XyDataSeries<double> _ds = new XyDataSeries<double>();
private const int FifoCapacity = 1000;
void AppendPoint(double x, double y)
{
using (_ds.SuspendUpdates())
{
_ds.Append(x,y);
if (_ds.Count > FifoCapacity)
{
_ds.RemoveAt(0);
}
}
}
}
现在,您可以在自定义系列上使用Remove,RemoveRange,RemoveAt。
请注意,根据SciChart的WPF Charts Performance Tips and Tricks文档,批量附加/删除远远超过一次一个点。