从串行端口处理程序调用函数需要太多时间和处理器能力

问题描述

我从串行端口接口获取数据,每个数据流(数据包)由1 KB组成。这些值是基本的数字示波器模拟信号。处理完这些数据后,我将信号绘制到屏幕上。

问题是,如果我调用处理来自串行端口“ DataReceivedHandler”的信号的函数,则会花费太多时间(200mS)和太多处理能力。但是,当我像通过按钮单击那样分别调用函数时,它花费了10ms。在调试了太多次之后,我找不到为什么花了太长时间?可能的原因是什么?你能给我一些解决方案吗?

在下面的两个示例中,结果是正确的,但耗时有所不同。

public void DataReceivedHandler(
                 object sender,SerialDataReceivedEventArgs e)
{

    SerialPort sp = (SerialPort)sender;
    int temp_buffer_count;
            


    temp_buffer_count = sp.BytesToRead;

    label55.Text += temp_buffer_count.ToString() + "--";
    serialPort1.Read(readBuffer,uart_count,temp_buffer_count);

    uart_count += temp_buffer_count;

    if(uart_count>3)
    {
        int dataadet = readBuffer[1] * 256 + readBuffer[2] + 3;

        if(uart_count>= dataadet)
        {
            if(readBuffer[0]==0xff)
            {
                UdpReceivedData = new byte[dataadet + 100];
                Array.copy(readBuffer,ReceivedData,dataadet);

              
                uart_count = 0;
                dataadet = 0;

                if(ReceivedData[3]==AdcDataIslemi)
                {
                    stopwatch2.Resart();
                    //this function tooks too much time
                    PreparePage(false,true);
                    stopwatch2.Stop();
                }

            }
                 

        }

    }

}

如果我通过按钮调用同一函数,则该函数的执行速度将提高20倍。

    private void button2_Click(object sender,EventArgs e)
    {
        stopwatch2.Resart();
        PreparePage(false,true);
        stopwatch2.Stop();
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)