LiveCharts不是图形库,它更像是代数库。
正常情况下一个图表的呈现过程是这样的:库的核心读取视图中画布的大小,在这种情况下为WPF,然后根据数据在图表中,它计算图表中每个系列,轴或图例所需的每个标签的大小和位置以及形状,最后核心对视图说,嘿!您需要在此处绘制一条线,在此处绘制矩形,并在此处也添加标签。
这样,我们就可以根据每个平台使用本机控件,一旦使用WPF,我们就可以使用其本机绘图工具“轻松地”为其他平台创建视图,或者如果该平台不够好,则可以使用任何其他第三者组件来渲染我们的图表。
**我们可以说该库有2个主要过程,分别是 Calculus和Rendering,第一个过程通常非常快,与其他WPF控件一样,遗憾的是,如果使用不正确,则渲染性能很差。**
为了提高性能,有以下几种方法:
1、使用增强库
这个增加库是与该库连接的一组轻量级系列,它允许您的图表具有数百万个点,并保持UI响应。
具体情况可以参考以下链接:geared
2、禁用动画
当您需要更好的性能时,可以轻松关闭动画:
<lvc:CartesianChart DisableAnimations="True" />
3、减少图表中的数值标签
- 对于版本1.x和更低版本,拥有大数据集时一定不要启用Series.DataLabels,因为它们既难于读取又难以使用 UI。
- 视觉元素, 截面和 轴的数量应少于25。
- 尽可能禁用悬停,使用空工具提示并 从图表中删除任何DataClick事件,如果您使用Geared包,则不需要这样做。
<lvc:CatesianChart Hoverable="False" DataTooltip="{x:Null}" />
4、固化笔触资源
确定笔触,填充或PointGeometies不会改变时,请冻结它们。
从0.7.15版本开始,默认情况下,默认的笔触,填充和几何形状被冻结。
详细解释可以参见:笔触冻结
5、避免使用 .Add() 增加子项
在图表中添加一系列值时,请使用.AddRange() 方法。
错误做法:
var cv = new ChartValues<double>();
for (var i = 0; i < 1000; i++){
cv.Add(5);
}
正确做法:
var temporalCv = new double[1000];
for (var i = 0; i < 1000; i++){
temporalCv[i] = 5;
}
var cv = new ChartValues<double>();
cv.AddRange(temporalCv);
//or you can also
var cv = temporalCv.AsGearedValues();