Ужасная производительность WPF! - PullRequest
4 голосов
/ 08 апреля 2010

Почему я использую более 80% ЦП при наведении курсора на некоторые ссылки?Как вы можете видеть на видео, которое я загрузил: http://www.youtube.com/watch?v=3ALF9NquTRE ЦП переходит на> 80% ЦП, когда я наводю указатель мыши на ссылки.

Мой стиль для элементов следующий

    <Style x:Key="LinkStyle" TargetType="{x:Type Hyperlink}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
        <Setter Property="TextBlock.TextDecorations" Value="{x:Null}" />
        <Setter Property="Foreground" Value="#FFDDDDDD"/>
        <Setter Property="Cursor" Value="Arrow" />
    </Style>    

Почему?

Ответы [ 3 ]

1 голос
/ 13 апреля 2010

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

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

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

1 голос
/ 09 апреля 2010

Не нужно удивляться - используйте XPerf и узнайте . Видео по теме , представленное на PDC09, превосходно, вы быстро заработаете.

0 голосов
/ 09 апреля 2010

Гиперссылка - это ваш собственный тип, верно?

Вместо этого я попытался применить ваш стиль к TextBlock и не смог заставить ЦП превышать 5%, поэтому, возможно, что-то происходит внутри Гиперссылки, когда изменяется одно из этих свойств. Попробуйте изолировать, какое свойство вызывает скачок ЦП.

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