mschart - 较大数据集的交互/光标性能较差

时间:2014-11-17 10:11:11

标签: c# .net data-visualization mschart

我使用mschart显示10行,每行最多60,000个数据点。每行有一个ChartArea和一个Series,设置为FastLine类型。

初始表现非常好,图表几乎立即加载。当需要任何类型的交互时,问题就开始了。在我的情况下,这意味着CursorX位置/选择被更改。 GUI线程达到约100%的使用率(整个核心),直到光标停止移动。在此期间,图表会偶尔更新。没有其他代码或函数被调用。

在分析应用程序以查看所有CPU时间的使用位置后,每次移动光标时都会显示重绘整个图表。所有10 * 60,000点数据。虽然这只有几千个数据点是合理的,但它根本不能很好地扩展。更改游标Interval值似乎没有任何区别。

我是否可以修改/避免此性能问题?如果没有,你能推荐任何其他图表库吗?

// // EDIT

根据要求,这里有一些测试代码显示与上述相同的问题。所需要的只是一个名为chart1的图表。将CursorX.IsUserEnabledCursorX.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的值越大,问题就越严重。

0 个答案:

没有答案