none
请问在WPF中绘制线条的时候,我怎么样才能只绘制新加点的轨迹,而不是绘制整个内容? RRS feed

  • 问题

  • 请问一下,如何才能做到?我现在的绘制,鼠标移动的时候,每取一个采样点,DrawingContext就会将整个内容重新绘制一遍(内部有一个采样点集合)。这样会造成CPU占用率非常的高(尤其是点越来越多的时候)。请问这里应该如何做?急盼指点!不胜感激! 
    2011年10月11日 10:06

答案

  • 根据你昨天的代码例子,我用Performence Tool测试了下,确实在绘制时有一定的CPU消耗,但不是所有的元素都会刷,仅有在绘制在刷:

    Perforator:

     

    亮粉色区域代表正在更新的区域。

    所以我怀疑你的性能问题是由于硬件加速不支持造成,请尝试开启它。如果本身你的设备不支持,那可能需要你考虑你的设计思路了,不要绘制太多的笔迹。 http://msdn.microsoft.com/en-us/library/aa970912.aspx


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 张柱敏 2011年10月13日 5:48
    2011年10月12日 6:28
    版主
  • 不管是不是软件还是硬件,都不会对整体进行刷新的,就如我上面的测试结果一样.只有粉色区域,也就是鼠标周围和当前正在画的笔迹在更新,但是问题是如果你是一笔画很多的话,整个这一个笔迹都会随着你的动作更新,直到你结束这一笔. 很遗憾,我们没有方法只更新当前你画的一点。除非你把所有点都独立,但是这样会造成更多的元素在可是界面中,性能反而受到更大的影响。  RenderTargetBitmap 在你的这种情况下没有什么作用,不过你还是可以试试 BitmapCache http://msdn.microsoft.com/en-us/library/system.windows.media.bitmapcache.aspx
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 张柱敏 2011年10月13日 5:48
    2011年10月12日 10:05
    版主

全部回复

  • 根据你昨天的代码例子,我用Performence Tool测试了下,确实在绘制时有一定的CPU消耗,但不是所有的元素都会刷,仅有在绘制在刷:

    Perforator:

     

    亮粉色区域代表正在更新的区域。

    所以我怀疑你的性能问题是由于硬件加速不支持造成,请尝试开启它。如果本身你的设备不支持,那可能需要你考虑你的设计思路了,不要绘制太多的笔迹。 http://msdn.microsoft.com/en-us/library/aa970912.aspx


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 张柱敏 2011年10月13日 5:48
    2011年10月12日 6:28
    版主
  • 非常感谢!我检查了一下硬件配置,发现已经加速了。这里能不能通过软件方面的改进来提高在绘制性能呢?就像我标题所说不绘制整个内容,而只是绘制前一个点和当前点之间的内容。有人建议使用RenderTargetBitmap来呈现先前绘制的内容,我不太明白这里如何处理?使用RenderTargetBitmap呈现的话,它的内容不也是不断刷新的吗?
    2011年10月12日 7:19
  • 不管是不是软件还是硬件,都不会对整体进行刷新的,就如我上面的测试结果一样.只有粉色区域,也就是鼠标周围和当前正在画的笔迹在更新,但是问题是如果你是一笔画很多的话,整个这一个笔迹都会随着你的动作更新,直到你结束这一笔. 很遗憾,我们没有方法只更新当前你画的一点。除非你把所有点都独立,但是这样会造成更多的元素在可是界面中,性能反而受到更大的影响。  RenderTargetBitmap 在你的这种情况下没有什么作用,不过你还是可以试试 BitmapCache http://msdn.microsoft.com/en-us/library/system.windows.media.bitmapcache.aspx
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 张柱敏 2011年10月13日 5:48
    2011年10月12日 10:05
    版主
  • 非常感谢!关于延迟的问题可能和我的机器有关系,我在其他人的机器上测试,没有那种延迟的现象。再次感谢!

     

    2011年10月13日 5:48