@postya

Как оптимизировать анимации?

У меня есть в приложении несколько анимаций.
Есть горячая клавиша, по нажатию на которую вызывается метод с анимацией.

На своем комьютере у меня анимации отлично отрабатывают, но вот на другом компьютере анимации тормозят. Мне кажется я неправильно создал анимации. То есть надо произвести оптимизацию,чтобы была хорошая производительность

Как правильно создавать анимацию,чтобы была наилучшая произхводительность?

вот пример одной анимации:

private void ShowCard()
        {
            Application.Current.Dispatcher.Invoke((Action)(() =>
            {                    
                DoubleAnimation anim = new DoubleAnimation((-window.RectCategory1.ActualWidth / 100) * 60, (window.RectCategory1.ActualWidth / 100) * 5, TimeSpan.FromSeconds(0.3));
                
                SineEase sineEase = new SineEase();
                sineEase.EasingMode = EasingMode.EaseOut;
                anim.EasingFunction = sineEase;
                window.cardQuestionBorder.RenderTransform.BeginAnimation(TranslateTransform.XProperty, anim);
            }));
        }


Насколько я понимаю, что при каждом вызове метода с этой анимацией, создается обьект этой анимации, остается в памяти и там сидит до тех пор пока приложеине на закроется?
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@AlexHell
я в WPF не шарю, мимо проходил
есть опыт в Win Forms, Unity и сопутствующем
может быть помогу чемто

при каждом вызове метода с этой анимацией, создается обьект этой анимации, остается в памяти и там сидит до тех пор пока приложеине на закроется?

Врятли, т.к. у объекта-анимации есть продолжительность, и он самоуничтожается под капотом по истечении таймера, вручную нет смысла удалять, я бы спроектировал именно так внутри (под капотом WPF всмысле)
Судя по примерам (я не эксперт WPF) делать надо именно так, как у вас и сделано.

вполне может быть что траблы с перформансом по таким причинам
* ShowCard вызывается слишком часто, а этого кода вы не привели, вполне могут быть проблемы, например цикл из ShowCard или вызов его каждый такт (update или что там у вас в WPF)
без защитного флага
тогда когда надо сделать чтото в духе
if (! isAnimPlayed)
{
  isAnimPlayed = true;
  ShowCard ();
}

* слабый другой ПК, CPU \ GPU, уточняйте и тестите на аналогичных
* много что модифицируется, т.е. window.cardQuestionBorder.RenderTransform это чтото большое и у него есть какието лишние потомки, и можно както разбить по-лучше
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы