0

我有一个包含图像、阴影效果、模糊效果等的ListView不同复杂容器。大量渲染这些容器会严重降低性能,特别是因为我在. 这就是为什么在这种情况下我设置为(将性能提高 15 倍 fps)。ListViewItemListViewCacheModeBitmapCache

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

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

目前我的3个选项是:

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

我的问题:

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

1 回答 1

0

行。经过大量阅读和实验,我想出了两件事:

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

  • 这让我想起Virtualization了我所缺少但不知道在WPF Lists.

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

于 2019-05-23T18:36:52.553 回答