Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改轴(MinValue和MaxValue)或添加新数据时,LiveCharts会重新渲染整个绘图_C#_Wpf_Charts_Livecharts - Fatal编程技术网

C# 更改轴(MinValue和MaxValue)或添加新数据时,LiveCharts会重新渲染整个绘图

C# 更改轴(MinValue和MaxValue)或添加新数据时,LiveCharts会重新渲染整个绘图,c#,wpf,charts,livecharts,C#,Wpf,Charts,Livecharts,我创建了一个包含5个图表的折线图。每个都有250个点:每1分钟1个点。我有一个按钮可以移动MinValueX和MaxValueX。还有一个事件UserControl\u MouseDown,它将新数据添加到一个图表中。但当我调用它时,需要15-20秒来移动或向绘图中添加数据。我认为1250分不是很多。看起来它再次绘制了整个图形,而不是移动它或添加新数据 我是否可以将渲染行为更改为更优化 这是我的折线图控件: 使用系统; 使用System.Collections.Generic; 使用系统组件模型

我创建了一个包含5个图表的折线图。每个都有250个点:每1分钟1个点。我有一个按钮可以移动MinValueX和MaxValueX。还有一个事件UserControl\u MouseDown,它将新数据添加到一个图表中。但当我调用它时,需要15-20秒来移动或向绘图中添加数据。我认为1250分不是很多。看起来它再次绘制了整个图形,而不是移动它或添加新数据

我是否可以将渲染行为更改为更优化

这是我的折线图控件:

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用System.Linq;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Input;
使用动态图表;
使用LiveCharts.Defaults;
使用LiveCharts.Wpf;
名称空间图
{
/// 
///LineChart2.xaml的交互逻辑
/// 
公共部分类LineChart2:UserControl,INotifyPropertyChanged
{
#区域属性
公共序列集合序列集合{get;set;}
私有字典序列完整集合{get;set;}
公共函数XFormatter{get;set;}
公共长轴步骤{get;set;}
公共双MinValueX{get;set;}
公共双MaxValueX{get;set;}
私有日期时间最小值xDate;
公共日期时间最小值xDate
{
获取{return minValueXDate;}
设置{minValueXDate=value;
MinValueX=value.Ticks;
OnPropertyChanged(“MinValueX”);
}
}
私有日期时间maxValueXDate;
公共日期时间MaxValueXDate
{
获取{return maxValueXDate;}
设置
{
maxValueXDate=值;
MaxValueX=value.Ticks;
OnPropertyChanged(“MaxValueX”);
}
}
公共双MinValueY{get;set;}
公共双MaxValueY{get;set;}
公共int ChartButtonsId{get;set;}
#端区
公共线形图2()
{
SeriesFullCollection=新字典();
SeriesCollection=新的SeriesCollection();
this.Loaded+=ControlLoaded;
DataContext=this;
初始化组件();
}
已控制加载私有void(对象发送方,路由目标)
{
MinValueXDate=DateTime.Now.AddHours(-3.5);
MaxValueXDate=DateTime.Now.AddHours(0.5);
AxisStep=TimeSpan.FromMinutes(15).Ticks;
XFormatter=val=>newdatetime((long)val).ToString(“HH:mm”);
MinValueY=0;//测试
MaxValueY=20;//测试
//试验
Text2Add(“A”);
Text2Add(“B”);
Text2Add(“C”);
Text2Add(“D”);
Text2Add(“E”);
刷新集合();
}
#区域添加/更新/删除
公共void AddChart(字符串标题、字典数据)
{
列表日期时间点=新列表();
foreach(数据中的var项)
添加(新的DateTimePoint(item.Key,item.Value));
SeriesFullCollection.Add(标题、日期时间点);
添加到集合(标题);
}
public void UpdateChart(字符串标题、字典数据)
{
var series=seriecollection.FirstOrDefault(x=>x.Title==Title);
var seriesfull=SeriesFullCollection.FirstOrDefault(x=>x.Key==title);
如果(系列!=null)
foreach(数据中的var项)
{
添加(新的日期时间点(item.Key,item.Value));
seriesfull.Value.Add(新的日期时间点(item.Key,item.Value));
}
}
public void RemoveChart(字符串标题)
{
var series=seriecollection.FirstOrDefault(x=>x.Title==Title);
var seriesfull=SeriesFullCollection.FirstOrDefault(x=>x.Key==title);
如果(系列!=null)
{
系列收集。删除(系列);
SeriesFullCollection.Remove(seriesfull.Key);
}
刷新集合();
}
私有void AddToCollection(字符串标题)
{
var seriesfull=SeriesFullCollection.FirstOrDefault(x=>x.Key==title);
var l=新的LineSeries();
l、 Title=seriesfull.Key;
l、 值=新的图表值();
l、 PointGeometrySize=2;

l、 Values.AddRange(seriesfull.Value.Where(x=>x.DateTime>=MinValueXDate&&x.DateTime x.DateTime>=MinValueXDate&&x.DateTime有一个指向页面的链接

为获得更好的性能,建议的可能性包括:

  • 禁用动画
  • 减少图表中的形状数
  • 尽可能地冻结
  • 避免多次调用.Add()

因此,对于您的情况,我至少会尝试第一个和最后一个建议。

设置CartesianChart DisableAnimations=“True”会有很大的不同。但您所说的“冻结所有您能冻结的内容”?您考虑过应用程序中的其他进程吗?@SilnyToJa在WPF中,可自由化的对象是笔刷、动画等。但从您的代码中,您不使用或引用任何可自由化的对象。更多信息可在此处找到: