繁体   English   中英

调整大小时 BitmapCache 性能不佳

[英]BitmapCache poor performance while resizing

我有一个ListView其中包含不同的复杂ListViewItem容器,包括图像、阴影效果、模糊效果等。大量渲染这些容器会严重降低性能,尤其是因为我在ListView顶部使用了模糊覆盖框架。 这就是为什么在这种情况下我将CacheMode设置为BitmapCache (将性能提高高达 15 倍的 fps)。

<Border.CacheMode>
    <BitmapCache />
</Border.CacheMode>

问题是我使用WrapPanelValueConverter来动态调整这些容器的大小并将其放入WrapPanel以便它们完全填充水平或平铺视图中的空间。 显然,这不适用于缓存,并且会产生严重的滞后/停顿(帧下降到 0)。

目前我的 3 个选项是:

  • 禁用缓存(并以近 15fps 的速度运行)
  • 禁用调整大小(看起来不可接受)
  • 仅在调整窗口大小时禁用缓存和调整大小(仍然表现不佳,但这是我拥有的最佳选择)

我的问题:

  • 为什么在使用缓存和不使用缓存调整大小时,性能会大幅下降?
  • 我是滥用缓存还是做错了?
  • 有没有更好的方法来解决这个烂摊子而不妥协?

好的。 经过大量的阅读和实验,我想到了两件事:

  • 首先, Caching不应该用于经常调整大小的元素,特别是如果它们太多(找不到原因)。 所以,我基本上缓存了固定大小的子元素。

  • 这让我想起了Virtualization ,这正是我所缺少的,但不知道WPF Lists支持。

通过更多优化,现在我可以平滑地调整窗口的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM