Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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# mschart-大型数据集的交互/光标性能较差_C#_.net_Data Visualization_Mschart - Fatal编程技术网

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

C# mschart-大型数据集的交互/光标性能较差,c#,.net,data-visualization,mschart,C#,.net,Data Visualization,Mschart,我正在使用mschart显示10行数据,每行最多显示60000个数据点。每行都有一个图表区和一个单独的系列,设置为typeFastLine 初始性能非常好,几乎可以立即加载图表。当需要任何类型的交互时,问题就开始了。在我的情况下,这意味着CursorX位置/选择已更改。GUI线程的使用率约为100%(整个内核),直到光标停止移动。在此期间,图形会偶尔更新。没有调用其他代码或函数 在分析应用程序以查看所有CPU时间的使用位置之后,每次移动光标时,似乎都必须重新绘制整个图表。所有10*60000点数

我正在使用mschart显示10行数据,每行最多显示60000个数据点。每行都有一个
图表区
和一个单独的
系列
,设置为type
FastLine

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

在分析应用程序以查看所有CPU时间的使用位置之后,每次移动光标时,似乎都必须重新绘制整个图表。所有10*60000点数据。虽然这是合理的,只需要绘制几千个数据点,但它的伸缩性并不好。更改光标
间隔
值似乎没有任何区别

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

//编辑//

根据要求,这里有一些测试代码,显示了与前面提到的相同的问题。所需的只是一个名为
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);
    }
}
public MainForm()
{
//
//Windows窗体设计器支持需要InitializeComponent()调用。
//
初始化组件();
//设置图表并添加值
ChartArea ca=chart1.ChartAreas.Add(“数据”);
ca.axix.IsMarginVisible=false;
ca.CursorX.Interval=0.001;
ca.CursorX.IsUserEnabled=true;
ca.CursorX.IsUserSelectionEnabled=true;
ca.axix.ScaleView.Zoomable=false;
对于(int i=0;i<10;i++)
{
系列s=新系列(“系列”+i.ToString());
s、 ChartArea=ca.名称;
s、 ChartType=SerieChartType.FastLine;
对于(int p=0;p<_maxPoints;p++)
{
双x=p/100.0;/(10ms步长)
双y=p*(1+i);
s、 点.AddXY(x,y);
}
图1.系列。添加(s);
}
}

_maxPoints的值越大,问题就越严重。

您是如何绑定到数据的?请发布添加/绑定数据的代码,以及更改CursorX PropertyId的代码,以查看应用程序的大部分时间都花在哪里?顺便说一句,如果没有你的代码,你不太可能得到帮助。我现在添加了一些测试代码来进一步强调这个问题。分析显示当光标位置更改时,图表必须重新绘制,这需要重新检查所有数据点(
Series.ResetAutoValues
被调用)尝试在循环之前添加
s.points.SuspendUpdate
,在循环之后添加
s.points.ResumeUpdates
。添加点的速度足够快。一旦图表加载完毕,用户用鼠标移动光标,问题就会出现