Как удалить точки из XyDataSeries в SciChart?

У меня есть быстрое приобретение, чтобы показать на SciChart и приложение, которое должно работать в течение длительного времени без использования всей оперативной памяти ПК.

Не обязательно, чтобы я отображал все точки на графике, а только определенный интервал времени, поэтому я решил удалить точки из ряда, когда я больше не хочу их отображать.

Я попробовал метод XyDataSeries.RemoveRange, но при вызове я получил следующее исключение:

System.NotSupportedException: 'Remove is not a supported operation on a Fifo Buffer'

Что вам предлагают побороть эту проблему?

1 ответ

Единственный способ обойти это - не иметь буфера FIFO и вручную использовать функции вставки / добавления и удаления DataSeries для поддержания определенного количества точек.

Например

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, добавляющей / удаляющей массово, производительность гораздо выше, чем один момент за раз.

Другие вопросы по тегам