我使用mschart
显示10行,每行最多60,000个数据点。每行有一个ChartArea
和一个Series
,设置为FastLine
类型。
初始表现非常好,图表几乎立即加载。当需要任何类型的交互时,问题就开始了。在我的情况下,这意味着CursorX
位置/选择被更改。 GUI线程达到约100%的使用率(整个核心),直到光标停止移动。在此期间,图表会偶尔更新。没有其他代码或函数被调用。
在分析应用程序以查看所有CPU时间的使用位置后,每次移动光标时都会显示重绘整个图表。所有10 * 60,000点数据。虽然这只有几千个数据点是合理的,但它根本不能很好地扩展。更改游标Interval
值似乎没有任何区别。
我是否可以修改/避免此性能问题?如果没有,你能推荐任何其他图表库吗?
// // EDIT
根据要求,这里有一些测试代码显示与上述相同的问题。所需要的只是一个名为chart1
的图表。将CursorX.IsUserEnabled
和CursorX.IsUserSelectionEnabled
设置为true
可以进行(有问题的)互动:
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//Set up chart and add values
ChartArea ca = chart1.ChartAreas.Add("Data");
ca.AxisX.IsMarginVisible = false;
ca.CursorX.Interval = 0.001;
ca.CursorX.IsUserEnabled = true;
ca.CursorX.IsUserSelectionEnabled = true;
ca.AxisX.ScaleView.Zoomable = false;
for (int i = 0; i < 10; i++)
{
Series s = new Series("Series_" + i.ToString());
s.ChartArea = ca.Name;
s.ChartType = SeriesChartType.FastLine;
for (int p = 0; p < _maxPoints; p++)
{
double x = p / 100.0; //(10ms steps)
double y = p * (1 + i);
s.Points.AddXY(x, y);
}
chart1.Series.Add(s);
}
}
_maxPoints的值越大,问题就越严重。