我现在的程序每00:00:00.0009000左右收到一包数据,然后要把数据以线段形式显示出来。
使用手动双缓冲方式绘图。
Graphics g = form.BackBuffer.Graphics;
g.Clear(form.PictureBox.BackColor);
这个过程,大概需要00:00:00.0030000,这就已经大大超过接收数据的时间间隔了。
form.BackBuffer.Render();
这个过程,大概需要00:00:00.0020000。
然后其他计算数据和画线段的时间大概是00:00:00.0020000。也就是我大概0.9毫秒接收一包数据。
但是分析和显示这包数据,需要7毫秒,就算不用双缓冲,也需要大概2毫秒。怎么处理...有什么好的办法没有?
不过奇怪的是,我现在这样的处理方式,在一般电脑上都没有延迟。
但是在同事一台xeon的CPU上有延迟,大家都是XP SP3的操作系统。

解决方案 »

  1.   

    这样会导致有些关键数据没有对应的线段显示。
    这也不行,因为数据来的比画的快,导致数据已经变化到了,但是线段要延迟一会儿才显示相应的变化。我现在其实就是这么做的。关键还是在于画图的效率。刚才试了一下,不用手动双缓存的办法,效率正好符合要求了。
    就是闪烁比较明显...不用双缓存,怎么解决闪烁问题呢。
    我现在这么处理的:
    接到数据后,
    g.Clear(form.PictureBox.BackColor);
    Draw();
    结果不延迟了。但是因为每次都有Clear和Draw的过程,导致闪烁。
      

  2.   

    做一个接受队列,数据都收集到队列中,然后从队列中读取绘制这么小的间隔并不影响查看效果的另外在xeon的CPU慢,我怀疑这是不是一台服务器呢,通常PC机不会采用XEON处理器
    绘制的快慢还要考虑显卡的性能和驱动程序的版本。仅仅看cpu不行。
      

  3.   


    就是一台普通的PC,显卡都一样,intel集成显卡。