问题描述
我从串行端口接口获取数据,每个数据流(数据包)由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 (将#修改为@)