2013-05-28 3 views
2

У меня есть этот холст в моем определении XAMLRenderTransform занимает слишком много CPU

<Canvas Width="128" Height="128" Margin="10"> 
    <Canvas.CacheMode> 
     <BitmapCache /> 
    </Canvas.CacheMode> 
    <Canvas.Triggers> 
     <EventTrigger RoutedEvent="Canvas.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation 
         From="0" To="360" 
         RepeatBehavior="Forever" 
         Storyboard.TargetName="spin" 
         Storyboard.TargetProperty="(RotateTransform.Angle)" 
         /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Canvas.Triggers> 
    <Canvas.RenderTransform> 
     <RotateTransform x:Name="spin" Angle="0" CenterX="64" CenterY="64" /> 
    </Canvas.RenderTransform> 
    <Image Source="Images\CircularLoading.png" Width="128" Height="128" /> 
</Canvas> 

Эта анимация занимает 50% моего процессора, как я могу улучшить производительность?

+1

Если все, что вы делаете, крутит изображение, возможно, будет улучшен анимированный GIF (предварительно вычисленные изображения всегда будут бить расчетные изображения). [Это] (http://stackoverflow.com/questions/210922/how-do-i-get-an-animated-gif-to-work-in-wpf) может помочь вопрос и ответ. –

ответ

3

Вы вращаетесь так быстро, как можете. Я думаю, у вас есть два ядра, поэтому на 50% один из них полностью занят спиннированием. Возможно, вы могли бы добавить Duration в ваш DoubleAnimation, так что потребуется несколько секунд на 360 раз, что уменьшит нагрузку на процессор.

С другой стороны, если по производительности вы хотите, чтобы вы вращались еще быстрее, используя другой 50% -ный процессор, вы также должны изучить аппаратную поддержку и, возможно, графические рамки. WPF хорош, но не для высокопроизводительной графики.

+0

Я попытался добавить Duration в свою анимацию, но ничего не изменилось. Также я заметил, что эта проблема возникает, если я помещаю свою анимацию в UserControl, если я помещаю анимацию в окно, CPU ведет себя «нормально» (приложение использует 3, 4%) –