BitmapCache在调整大小时性能不佳

时间:2019-02-09 07:43:30

标签: wpf caching bitmapcache

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

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

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

目前我的3个选择是:

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

我的问题:

  • 为什么在调整缓存大小与不进行缓存的同时调整性能会导致这些巨大的下降?
  • 我滥用缓存或做错了吗?
  • 有没有更好的方法来解决此问题而没有妥协?

1 个答案:

答案 0 :(得分:0)

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

  • 首先,Caching不应用于经常调整大小的元素,尤其是如果元素太多(无法找出原因)。因此,我基本上是缓存固定大小的子元素。

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

现在,通过更多优化,我可以重新调整窗口黄油的大小。