WPF Choppy Animation - PullRequest
       4

WPF Choppy Animation

9 голосов
/ 04 июня 2010

WPF Windows-XP SP3

У меня проблема с простой анимацией WPF.

Я использую следующий код Xaml (в XamlPad, а также в проекте WPF):

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Border Name="MyBorder" BorderThickness="10" BorderBrush="Blue" CornerRadius="10" Background="DarkRed" >
       <Rectangle Name="MyRectangle" Margin="10" StrokeDashArray="2.0,1.0" StrokeThickness="10" RadiusX="10" RadiusY="10" Stroke="Black" StrokeDashOffset="0">
           <Rectangle.Triggers>
               <EventTrigger RoutedEvent="Rectangle.Loaded">
                   <BeginStoryboard>
                       <Storyboard>
                           <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="StrokeDashOffset" From="0.0" To="3.0" Duration="0:0:1" RepeatBehavior="Forever" Timeline.DesiredFrameRate="30" />
                       </Storyboard>
                   </BeginStoryboard>
               </EventTrigger>
           </Rectangle.Triggers>
       </Rectangle>
    </Border>
</Page>

Имеет эффект анимирования границы вокруг прямоугольника. После новой перезагрузки машины эта анимация приятная и плавная. Тем не менее, я склонен оставлять свою машину включенной все время, и по истечении определенного периода времени (я не знаю, как долго) анимация начинает заикаться и становится прерывистой.

Я подумал, что это могут быть проблемы с памятью или ресурсами, но после закрытия всех других приложений и любых служб, которые кажутся ненужными, заикание все еще продолжается. Однако после перезагрузки системы анимация снова становится плавной!

У меня такие же симптомы в приложении WPF или в XamlPad. В случае приложения не имеет значения, запускаю ли я в отладчике или запускаю исполняемый файл напрямую.

Я применил патч по этой ссылке: http://support.microsoft.com/kb/981741 и подумал, что он позаботился о проблеме, но, похоже, этого не произошло.

Я видел некоторые сообщения, которые могут указывать, что использование прозрачности может повлиять на анимацию, но, как вы можете видеть, мой xaml не использует прозрачность.

Может кто-нибудь дать мне несколько советов о том, как определить, в чем проблема? Существуют ли какие-либо средства диагностики WPF, которые могут помочь?

ОБНОВЛЕНИЕ: Я проверил мои видео драйверы, и они являются последней версией. (nVidia GeForce 8400 GS)

Ответы [ 4 ]

2 голосов
/ 10 июня 2010

После запуска анимации в течение чуть более одного дня я не вижу ничего по-настоящему ужасного, хотя использование памяти немного увеличилось.

То, что я закончил, было выполнением вашего примерана XP SP3 в kaxaml, а затем выполнил проверку производительности плохого человека с помощью perfmon.

Если вы раньше не использовали perfmon, просто выполните Run -> perfmon из меню «Пуск».Скорее всего, в списке появятся несколько счетчиков, но вы можете щелкнуть по каждому из них и удалить их, если не хотите отслеживать эти значения.Я не думаю, что загрузка процессора в вашем случае является проблемой, но вы можете оставить ее там на всякий случай.

Щелкните правой кнопкой мыши в любом месте и выберите «Добавить счетчики», затем в разделе «Объект производительности» выберите «.NET».Память CLR ".Справа выберите интересующий исполняемый файл (в моем случае это «Kaxaml»).С левой стороны выберите «# байт во всех кучах».Я также изменил бы частоту дискретизации на что-то большее, например, 300 секунд, чтобы вы могли лучше понять скорость изменения за период времени, в течение которого вы испытываете замедление.

Это может не помочь вам найтизамедление, но это разумный первый шаг.Возможно, вам также следует скачать пробную версию профилировщика ANTS 5, чтобы узнать, поймает ли он что-нибудь странное.

1 голос
/ 10 июня 2010

Я позволил анимации работать более 30 часов, и она не замедлилась и не стала нестабильной, но я использую Win 7. Я также позволил ей работать на виртуальной машине XP в течение нескольких часов, и она работает нормально ,

Моя лучшая догадка: видеодрайвер

Обоснование. Видеодрайвер является наиболее сложным драйвером в вашей системе и во многом зависит от общей производительности вашего компьютера. Хотя возможно, что таймер отправки анимации отстает, если вы не используете много ЦП, это маловероятно.

Предложения:

  • Проверка обновления драйвера
  • Попробуйте другую видеокарту (если возможно)
  • Взломайте PerfMon, возьмите все возможные счетчики WPF и DirectX и следите за временем
0 голосов
/ 23 августа 2016

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

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

0 голосов
/ 10 июня 2010

Я думаю, что с WPF вы встретите машины, которые не очень хорошо рендерится. Я попробовал это на своем ноутбуке, и это было хорошо.

...