none
请问下如何在WPF中开启2D绘图的硬件加速呢? RRS feed

  • 问题

  • 因为手头的项目要实时显示多块仪表,尝试使用DrawImage,但是发现CPU占用率始终在12左右,所以想请教一下如何在WPF中开启2D的硬件加速。谢谢
    2012年4月25日 12:46

答案

  • 对于2D的对象,只有下列情形有硬件加速,和不支持硬件加速:http://msdn.microsoft.com/zh-cn/library/ms742196.aspx

    关于如何开启,请看文档:http://msdn.microsoft.com/zh-cn/library/aa970912.aspx

    如果是WPF 3.5 则也可以在窗体Loaded后

            HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
            HwndTarget hwndTarget = hwndSource.CompositionTarget;
            hwndTarget.RenderMode = RenderMode.Default;
    
    

    WPF 4.0则:

          RenderOptions.ProcessRenderMode = RenderMode.Default;
    

    不过因为默认就是开始硬件加速的,所以你完全可以不用设置。

    -------------------------
    我只能告诉你,你的问题主要是你的代码设计的问题,并不是图像加速性能造成。因为图像加速并不影响CPU使用率。而且即使CPU在12% 由于你的代码中包含循环和频繁的操作,这个占用率是正常的。 请设计优化下代码,看看是不是用计时器来每隔一段时间来更新绘制界面,而不是用使用死循环 while (true)


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月26日 8:03
    版主

全部回复

  • 对于2D的对象,只有下列情形有硬件加速,和不支持硬件加速:http://msdn.microsoft.com/zh-cn/library/ms742196.aspx

    关于如何开启,请看文档:http://msdn.microsoft.com/zh-cn/library/aa970912.aspx

    如果是WPF 3.5 则也可以在窗体Loaded后

            HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
            HwndTarget hwndTarget = hwndSource.CompositionTarget;
            hwndTarget.RenderMode = RenderMode.Default;
    
    

    WPF 4.0则:

          RenderOptions.ProcessRenderMode = RenderMode.Default;
    

    不过因为默认就是开始硬件加速的,所以你完全可以不用设置。

    -------------------------
    我只能告诉你,你的问题主要是你的代码设计的问题,并不是图像加速性能造成。因为图像加速并不影响CPU使用率。而且即使CPU在12% 由于你的代码中包含循环和频繁的操作,这个占用率是正常的。 请设计优化下代码,看看是不是用计时器来每隔一段时间来更新绘制界面,而不是用使用死循环 while (true)


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月26日 8:03
    版主
  • 嗯 谢谢 我尝试一下
    2012年4月26日 10:22