Je construis un outil WPF pour visualiser des données pour les conteneurs frigorifiques (conteneurs de refroidissement). Tracé assez simple des données du capteur (températures, point de consigne, humidité).
Problème de performances de rendu. Les données sont chargées très rapidement via l'API REST. Après avoir reformaté les valeurs en DateTimePoints (prend 1ms), elles sont définies en tant que valeurs par engrenage sur SeriesCollection lié. Immédiatement après la définition des valeurs, l'application se fige pendant 10 secondes, rend le graphique stut- rial et l'application entière n'est plus utilisable. J'ai travaillé tous les exemples et des démonstrations, mais je ne peux pas Livecharts pour effectuer de façon utile et je ne sais pas ce que je fais mal iciLiveCharts WPF performance de rendu médiocre
CartesianChart
3x GStepLineSeries avec (dans ce cas) 626 Valeurs par série
XAxisFormatter DateTimePoint
Je ne sais pas ce que je fais mal. Les valeurs de GearedValues de 1900 sont-elles trop importantes? Est-ce que LiveCharts est merdique?
public GStepLineSeries SupplyTemperatures
{
get { return _supplyTemperatures ?? (_supplyTemperatures = new GStepLineSeries() { Title = "Supply" }); }
set
{
_supplyTemperatures = value;
RaisePropertyChanged();
}
}
public GStepLineSeries ReturnTemperatures
{
get { return _returnTemperatures ?? (_returnTemperatures = new GStepLineSeries { Title = "Return" }); }
set
{
_returnTemperatures = value;
RaisePropertyChanged();
}
}
public GStepLineSeries Setpoints
{
get
{
return _setpoints ?? (_setpoints = new GStepLineSeries
{
Title = "Setpoint",
Fill = Brushes.Transparent,
PointGeometry = null
});
}
set
{
_setpoints = value;
RaisePropertyChanged();
}
}
public SeriesCollection ReeferDataTemperatureSeries
{
get
{
if (_reeferDataTemperatureSeries == null)
{
_reeferDataTemperatureSeries =
new SeriesCollection(GetSeriesConfig()) { SupplyTemperatures, ReturnTemperatures, Setpoints };
}
return _reeferDataTemperatureSeries;
}
set
{
_reeferDataTemperatureSeries = value;
RaisePropertyChanged();
}
}
private CartesianMapper<DateTimePoint> GetSeriesConfig()
{
return Mappers.Xy<DateTimePoint>()
.X(rdcv => (double)rdcv.DateTime.Ticks)
.Y(rdcv => rdcv.Value);
}
Xaml:
<lvc:CartesianChart
Height="800"
DisableAnimations="True"
IsManipulationEnabled="False"
LegendLocation="Top"
Series="{Binding ReeferDataTemperatureSeries}">
<lvc:CartesianChart.AxisX>
<lvc:Axis
Title="Time"
LabelFormatter="{Binding ReeferDataFormatter}"
RangeChanged="Axis_OnRangeChanged"
Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" />
</lvc:CartesianChart.AxisX>
<lvc:CartesianChart.AxisY>
<lvc:Axis Title="Temperature" />
</lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
Avez-vous essayé de profiler votre application? Quelles méthodes consomment le plus de temps CPU? – dymanoid