重现步骤:
- 创建新的解决方案/添加新的 WPF 应用程序项目。
- 在主窗口中仅放置一个 Canvas 。
- 创建 RotateTransform + PageUp/Down 事件以将角度增加 +-10。
- 在 Canvas 上放置 50 个多边形
- 按 PageUp/Down(并按住)
在我的电脑上,CPU 使用率为 80%。
- 现在尝试放置 1000 个多边形并按 PageUp/Down - CPU 可以在 1-2 帧/秒时达到 100%。
我检查了 RenderCapability.Tier,它是 2 - 意味着它应该通过硬件渲染所有内容。
但是它不起作用,为什么?
最佳答案
更多信息会很有用,例如您使用的多边形类型、您的显卡以及您正在使用的 WPF 版本。
我尝试了你的例子,500 个简单的多边形没有任何问题。 (酷睿 2 双核、8800 GTS)。您的示例以及其他时候,当您拥有相当复杂的内容且不经常更改但您正在对其进行转换时,可以从 BitmapCache 中受益匪浅。 .
<Canvas.CacheMode>
<BitmapCache />
</Canvas.CacheMode>
使用 BitmapCache,您应该能够转换任意数量的元素,尽管每当需要重新渲染它们时,您仍然会受到性能影响。如果您使用复杂路径,您也可以尝试 freezing他们。
关于wpf - 为什么 WPF/RotateTransform 使用如此多的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142373/