Как узнать, почему анимация заикается? - PullRequest
9 голосов
/ 16 декабря 2010

У меня есть несколько довольно простых анимаций (перемещение текста, перемещение эллипсов и т. Д.) И работа в полноэкранном режиме (1920x1080 минус панель задач), WPF Performance Suite сообщает о хорошей частоте кадров около 50 FPS на протяжении всей анимации. Добавление грязного прямоугольника составляет где-то около 300 прямоугольных / с, кадры SW находятся между 0 и 4, а кадры HW между 3 и 5. Использование видеопамяти составляет около 80 МБ.

WPF Performance screen shot

Проблема в том, что анимация заикается каждые полсекунды. Это определенно не жидкость: - (

Моя машина - новый ноутбук Dell XPS 15 с GeForce GT 435 с 2 ГБ памяти. - Драйверы в курсе. (Такое же поведение наблюдается и на моем нетбуке (в полноэкранном режиме), поэтому я не думаю, что это связано с аппаратным обеспечением.)

Если я уменьшу окно, заикание исчезнет.

Заикание происходит с простейшей анимацией - даже с парой элементов, но добавление большего количества элементов, безусловно, делает его более заметным.

Как я могу узнать, что вызывает это заикание?

Когда я думаю об этом, на самом деле я не видел ни одной анимации WPF, которая бы работала плавно в полноэкранном режиме. Это вообще возможно?

Ответы [ 3 ]

4 голосов
/ 10 июля 2012

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

<Storyboard Timeline.DesiredFrameRate="10">
    <!-- ....blah blah blah  -->
</Storyboard>

Если ваша анимация вызывает массовый пересчет дочерних или родительских элементов, изменив значение DesiredFrameRate будет иметь каскадное влияние на количество вычислений, выполненных системой.Также ознакомьтесь с разделом «Замечания» этой ссылки .Это объясняет, почему / когда вы должны его использовать.

Если установка более низкой частоты кадров исправляет ваше заикание, то вам нужно рассмотреть возможность упрощения вашего XAML, чтобы ограничить количество пересчета, необходимое для каждого кадра вашей анимации (ограничиваяколичество дочерних или родительских объектов, измененных или каким-либо образом изменяемых каждым кадром / изменениями, вносимыми анимацией.

Возможно, вы также захотите проверить " WPF Performance Suite ".Это потрясающий набор инструментов, позволяющий определить, что именно происходит в вашем приложении WPF, посмотреть, какие части вашего окна перекрашиваются и когда, а также загруженность ЦП каждого из ваших элементов XAML!

Надеюсь, этопомогает!

1 голос
/ 02 мая 2012

Patrick

У меня нет ответов. Все, что я могу сделать, это обеспечить некоторую солидарность. Я пытаюсь оживить ItemsControl. Концепция довольно проста, правда. У меня есть ListView и в ListView у меня есть GridView. Я хочу, чтобы элементы в GridView плавно переходили из одной строки в другую по мере сортировки базового списка, чтобы, например, отсортированный список оставался отсортированным при изменении значений в списке.

Я заметил это: анимация на умеренно сложных элементах управления - это нагрузка на процессор. Заикание, я уверен, просто связано с максимальным использованием ЦП (я заметил, что вы не указали график ЦП в своем дампе выше). Держите процессор около 50%, и анимация выглядит плавной, выше 75%, и вы получаете эти заикания. Все еще работает над проблемой, но я думаю, что она идет глубже, чем мой код.

Don

0 голосов
/ 23 августа 2016

У меня была похожая проблема, когда она заикалась, ничего особенного, она просто выглядела как маленькие заикания тут и там, пока я запускал программу. По догадке, я закрыл Google Chrome, когда он работал, и это исправило его, прокрутка стала полностью плавной ...

Так что мой совет: если у вас есть какие-либо открытые браузеры, проверьте, решает ли их закрытие проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...