WPF中,一个由Line控件的StrokeDashArray属性引发的CPU占用率问题

  • Post author:
  • Post category:其他


今天遇到一个挺特别的问题,先记录下来。

一个Viewbox中包含一个Canvas,然后在这个Canvas上面显示视频图像帧。在此基础之上,需要在视频上overlay一些控件。其中有一些是用来测量尺寸的横线和竖线。

<Viewbox>
    <Canvas>
        <Image>...</Image>
        <StackPanel>
            <Line StrokeThickness="1" StrokeDashArray="2,2"><Line>
        </StackPanel
    </Canvas>
</Viewbox

显示每一帧图片的时候,发现CPU占用率比较高,720×480的图片,30fps就占到了10%以上。当把Line控件去掉的时候,CPU占用率明显下来了,到了6%左右。

后来发现了这个StrokeDashArray属性,我用它来设置虚线的。如果去掉这个属性,CPU占用率就降到6%左右。

初步判断,我猜这个现象是由于WPF里面Canvas的渲染机制引起的。先记录一下。



版权声明:本文为captainst原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。