慎用 CompositionTarget.Rendering

Fork Me On Github
zodream 编程技术 C# 2022年05月

慎用 CompositionTarget.Rendering

在WPF中使用

c#
              
private void RollLabel_Unloaded(object sender, RoutedEventArgs e)
{
    CompositionTarget.Rendering -= CompositionTarget_Rendering;
}

private void RollLabel_Loaded(object sender, RoutedEventArgs e)
{
    CompositionTarget.Rendering += CompositionTarget_Rendering;
}

private void CompositionTarget_Rendering(object? sender, EventArgs e)
{
    InvalidateVisual();
}
1234567891011121314

虽然保证了动画看上去更丝滑,但这个是按帧执行的,具体一秒多少帧取决于电脑支持的最大帧数。

但是很占用GPU,一个小的移动的动画使用CompositionTarget.Rendering就直接占用60%的GPU

跟 DispatcherTimer 相比较

优势

  1. 同样的帧数,占用同样的GPU,明显 CompositionTargetDispatcherTimer 的动画更流畅,DispatcherTimer有明显的卡顿感。

劣势

  1. DispatcherTimer 支持自定义时间间隔,可以减少帧数来减少GPU占用
点击查看全文
0 383 0