У меня следующая ситуация.
Существует одна линейная диаграмма, которая может отображать 10 линий одновременно.Каждая строка содержит 355 точек данных.Пользователь может включать и выключать каждую строку, выбирая / отменяя выбор объектов данных, которые содержат ряд данных.
Строки диаграммы выглядят так:
<charting:LineSeries ItemsSource="{Binding DataSlot1, Mode=OneWay}"
IndependentValueBinding="{Binding X, Mode=OneWay}"
DependentValueBinding="{Binding Y, Mode=OneWay}"
DataPointStyle="{StaticResource styleForDataSlot1}"
IsSelectionEnabled="False" />
, и я загружаю данные в каждуюиз 10 «слотов данных» из ViewModel следующим образом.
Точки данных являются структурами:
public struct SimpleDataPoint
{
public double X { get; set; }
public double Y { get; set; }
}
ViewModel содержит «слоты данных»:
private SimpleDataPoint[][] _dataSlots;
и ViewModel предоставляетданные слоты через свойства:
public SimpleDataPoint[] DataSlot1
{
get { return _dataSlots[0]; }
}
когда я загружаю данные в слот, я делаю что-то вроде этого:
_dataSlots[freeSlot] = myDataProvider.GetPoints();
, чтобы очистить данные из слота, который я делаю:
_dataSlots[slotToClear] = null;
После каждой операции добавления / удаления данных для слота я вызываю
OnPropertyChanged("DataSlot1");
Проблема: , если пользователь долго работает, добавляя и удаляя строки данных дляДиаграмма, использование памяти для моего приложения скоро достигает около 100 мегабайт.
Чтобы выяснить, не связана ли проблема с моим кодом, я прокомментировал вызовы OnPropertyChanged.Память не выросла и, конечно, на графике не отображались никакие данные.
Итак, я предполагаю, что проблема в том, что диаграмма не освобождает память.Память не освобождается после того, как я выполню _dataSlots [slotToClear] = null и соответствующая строка данных на диаграмме исчезнет, а также память не вернется к нормальному состоянию после того, как я полностью закрою представление WPF, где находится диаграмма.
Я пытался даже вызывать System.GC.Collect () после каждого dataSlots [slotToClear] = null, но это не помогает.
Как заставить диаграмму WPF Toolkit освободить память для рядов данныхкоторые больше не отображаются?