应用LayoutTransform与RenderTransform的性能影响?

时间:2012-04-26 07:53:02

标签: wpf performance rendertransform layouttransform

我已经处理过LayoutTransform和RenderTransform,我知道每个都适合我之前项目中使用过的特定场景。

然而,从性能角度和使用WPF分析工具时,对于一个实例,哪一个对UI性能的影响较小?

2 个答案:

答案 0 :(得分:13)

要添加到gliderkite的答案,RenderTransforms还将在有能力时由GPU处理,而LayoutTransforms则在CPU上完成。

答案 1 :(得分:11)

由MSDN指定:

  

要将转换应用于FrameworkElement,请创建一个Transform并将其应用于FrameworkElement类提供的两个属性之一:LayoutTransform - 在布局传递之前应用的转换。应用变换后,布局系统处理元素的变换大小和位置。   RenderTransform - 一种修改元素外观的变换,但在布局传递完成后应用。通过使用RenderTransform属性而不是LayoutTransform属性,您可以获得性能优势。   你应该使用哪个属性? 由于它提供的性能优势,请尽可能使用RenderTransform属性,尤其是在使用动画转换对象时。在缩放,旋转或倾斜时使用LayoutTransform属性,您需要元素的父元素调整元素的变换大小。请注意,当它们与LayoutTransform属性一起使用时,TranslateTransform对象似乎对元素没有影响。这是因为布局系统将已翻译的元素作为其处理的一部分返回到其原始位置。

另外:

  

如果在不需要布局系统完全通过的场景中调用LayoutTransform,则会导致应用程序性能下降。将LayoutTransform应用于Panel的Children集合时,它会触发布局系统的新传递,并强制重新测量和重新排列所有屏幕上的对象。如果要更新完整的应用程序用户界面(UI),则此功能可能正是您所需要的。但是,如果您不需要完整的布局传递,请使用RenderTransform属性,该属性不会调用布局系统,因此,对于此场景通常是更好的选择。