none
WPF 绘制多条曲线界面相应慢问题 RRS feed

  • 问题

  • 我用DrawingVisual绘图

    其中一个DrawingVisual绘制了12条波形曲线(导联线),每条直线大概在1000个点(用DrawingContent.Drawline连接各点),结果界面呈现的时候(也就是DrawingContent.close() 的时候用了14s)

    在Winfrom中会有延时,但没这样严重。

    如题,请问我是哪里出现了问题,是设计上的问题,还是没有启用优化?

    还有,像DrawingContent.Drawline方法,属于硬件绘图吗?貌似还是用CPU计算的。



    • 已编辑 崔彦松 2012年10月11日 4:10 补充2
    2012年10月11日 3:30

答案

全部回复

  • 自己顶一下。

    我想用Proformance tool 发现用不了(我的环境是:Server2008 R2   。netFramework 4.0),莫非我要装3.5?

    竟然没人回答,我就把我自己的实现或为实现的思路记录下来:

    1.尝试在WPF用GDI+的绘制方法代替WPF的绘图方式。(暂时没有尝试,留作最后没有解决办法时用。)

     2.现在这个问题已经有点眉目了,用StreamGeometry,但是新的问题出来了:用系统Stopwatch跟踪发现总共的执行时间在300MS以内,但是实际界面从开始

    执行到刷新出数据的时间间隔在2000MS(可能是实际绘图是绘在了显卡的显存,然后显卡又执行了刷新到界面中?在刷新到界面之前,界面是可以拖动的,所以由此

    感觉可能是显卡异步操作?待求证。),还不是很理想,Go on。

    2012.10.12 15:00 过程:

    经测试StreamGeometry依然效率不高,不符合要求,开始尝试WPF中用GDI+绘图并整合进控件。

    2012.10.12 17:23 过程:

    已经实现在WPF中用GDI+绘制的波形(image),并能转换成WPF所需的Image类型,赋值给Canvas。接下来的任务是:测试效率,高效整合进WPF。

    2012.10.12 17:56 过程:

    实验结果 12× 5000个点在GDI+(已整合进WPF) 绘图不足1S,已满足要求。

    • 已编辑 崔彦松 2012年10月12日 9:56 更新
    2012年10月11日 5:55
  • 其实你用wpf来直接生成图片要比GDI+更快一些. 这个我有做过实验.

    • 已标记为答案 崔彦松 2012年10月16日 4:03
    2012年10月15日 1:52
  • To:cuiweifu

    最后的实现是用WPF生成的图片,只是先用GDI+绘制在Winfrom下的Image上(两者不能直接用),然后在把这个Image转换成WPF识别的Image,我是这样理解的不知道对不对。

    再罗嗦一句:

    2012.10.16 12:01 过程:

    现已整合进WPF,其他相关信息用DrawingVisual生成,然后控制Dic<stringName,DrawingVisual>,手动更新。最后在整合DrawingVisual生成的Image和GDI+生成的Image。

    至此,问题已经解决,关闭帖子,给唯一的回答者。

    如果后面的人有什么问题可以加我扣扣:229063661,乐于分享。(加好友的时候说明目的。)

    2012年10月16日 4:03
  • 不是用GDI+做中间过程. 直接用WPF去生产图片.

    我当时测试是将文章绘制到图片上速度测试, WPF性能更好一些.

    具体可参考System.Windows.Media.Imaging空间下的RenderTargetBitmap.

    不知道你的曲线绘制会如何. 可测试一下.

    2012年10月16日 8:50