我有这个WPF应用程序,可以连续显示来自500万像素数码相机的实时图像。图像首先从字节数组转换为bitmapsource,然后显示在Image控件中:
m_imageControl.Source = MyBitMapSource;
流式传输时,CPU利用率约为30-35%。 " RenderCapability.Tier>> 16"指示"第2层"所以我认为我的系统应该足够,WPF会尽可能地利用硬件渲染。
有趣的是,如果使用以下方法强制进行软件渲染:
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
CPU利用率降至约25%,app报告显示的帧速率相同(没有性能损失)。
我对这个结果感到困惑,因为我认为硬件渲染应该比软件渲染提供更好的性能(更少的CPU)。有人可以对此有所启发吗?
我的系统设置为:
答案 0 :(得分:2)
来自here
的回答首先将图像从字节数组转换为bitmapsource 显示在图像控件中:“
当您使用硬件渲染时,这会强制它序列化 每帧都有一个新的GPU图像。通常,GPU可以缓存 图像,因此序列化开销小于渲染 开销 - 但在你的情况下,你将丢弃GPU上的图像 不断地,所以将它推向GPU并没有任何优势 在硬件中渲染。
通过强制进行软件渲染,您可以避免每次都推送到GPU 框架,这就是为什么它在这种情况下实际上表现更好。