WPF中,一个由Line控件的StrokeDashArray属性引发的CPU占用率问题
程序员文章站
2022-06-08 17:22:05
...
今天遇到一个挺特别的问题,先记录下来。
一个Viewbox中包含一个Canvas,然后在这个Canvas上面显示视频图像帧。在此基础之上,需要在视频上overlay一些控件。其中有一些是用来测量尺寸的横线和竖线。
<Viewbox>
<Canvas>
<Image>...</Image>
<StackPanel>
<Line StrokeThickness="1" StrokeDashArray="2,2"><Line>
</StackPanel
</Canvas>
</Viewbox
显示每一帧图片的时候,发现CPU占用率比较高,720x480的图片,30fps就占到了10%以上。当把Line控件去掉的时候,CPU占用率明显下来了,到了6%左右。
后来发现了这个StrokeDashArray属性,我用它来设置虚线的。如果去掉这个属性,CPU占用率就降到6%左右。
初步判断,我猜这个现象是由于WPF里面Canvas的渲染机制引起的。先记录一下。