WPF 中的一个 bug 造成 CPU 资源拉满
在 WPF 里可以使用 DashStyle 属性实现虚线的功能,通过传入 double 数组即可实现这个功能,但是如果传入的数组是[0,0]就表示先绘制零宽度线条,再空出零宽度的间隔。这其实是一个震荡收敛,要么整条线绘制的是实线,要么就是什么也不绘制,成为空白。那么就存在一个问题,就是求一个线段有多少个无穷小的点组成的问题。计算机虽然有精度限制,但这个问题所需要计算量非常大,因此会造成渲染线程使得 CPU 直接拉满。例如下面这段代码:
复制代码
将以上的 Test 类放到界面里面,并在 XAML 代码里中放入 Grid:
复制代码
在代码中,我们设置鼠标移动的时候设置刷新 Test:
复制代码
运行上述代码,并且鼠标在窗体内华东,我们在任务管理器中可以看到 CPU 使用率接近于 100%。关于这个问题国内已经有人报告给了 WPF 的开发团队,但目前 WPF 开发团队并未回复,而且也没有发布补丁,但是就这个问题形成的原因来说,一般在项目中几乎遇不到,因为没有人会将 DashStyle 属性设置为[0,0],除非他脑子瓦特了。
评论