У меня есть небольшое приложение UWP, которое считывает данные в режиме реального времени и отображает их в Syncfusion (v17.3460.0.14) SfChart. Казалось, все работает нормально, но я оставил его на ночь, а утром он использовал более 8 ГБ памяти (и был заморожен)! При отладке кажется, что, когда запускается заставка, и, вероятно, когда экран переходит в режим сна, память процесса начинает медленно увеличиваться, достигая ГБ за несколько часов;когда экранная заставка закрывается, использование памяти возвращается к нормальному ожидаемому уровню (процесс 120 МБ / куча 80 МБ). Если я оставлю его включенным во время использования компьютера, проблем не будет.
Я сократил код до небольшого примера. Обычно данные поступают из веб-API. Удаление привязки данных из свойства ItemsSource в FastLineSeries приводит к исчезновению проблемы.
public class DataPoint
{
public DateTime Timestamp { get; set; }
public long? AttainableRate { get; set; }
}
private readonly DispatcherTimer _timer = new DispatcherTimer();
public ObservableCollection<DataPoint> Data { get; }
= new ObservableCollection<DataPoint>();
public GraphPage()
{
this.InitializeComponent();
_timer.Interval = TimeSpan.FromSeconds(1);
_timer.Tick += this.Timer_Tick;
_timer.Start();
}
private async void Timer_Tick(object sender, object e)
{
var now = DateTime.Now;
var ran = new Random();
Data.Add(new DataPoint
{
Timestamp = now,
AttainableRate = ran.Next(8000, 10000),
});
}
<sf:SfChart>
<sf:SfChart.PrimaryAxis>
<sf:DateTimeAxis RangePadding="Additional" Interval="10" IntervalType="Minutes" SmallTicksPerInterval="10" />
</sf:SfChart.PrimaryAxis>
<sf:SfChart.SecondaryAxis>
<sf:NumericalAxis Header="Bandwidth (Kbps)" Minimum="0" Maximum="11000" Interval="1000" />
</sf:SfChart.SecondaryAxis>
<sf:FastLineSeries Label=" Max. Attainable Rate (Kbps)"
ItemsSource="{x:Bind Data}" XBindingPath="Timestamp"
YBindingPath="AttainableRate"/>
</sf:SfChart>
Вот краткий пример снимок экрана . На данный момент приложение работает около 30 минут, и заставка включена. Непосредственно перед подъемом (и первым снимком), когда заставка была отключена.
Итак, это проблема с моим кодом или ошибка в Syncfusion или какой-то другой причудливой точке / UWP?