2010-04-08 2 views
4

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

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

<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>  

Почему?

+0

Значит, вы не хотите, чтобы текущее приложение использовало все доступные CPU? Переключение цвета переднего плана выглядит гладко для меня. Вы пытались привязать свой процессор> 50% и посмотреть, ухудшается ли производительность/опыт? – micahtan

+0

Является ли 80% процессора действительно нормальным для изменения цвета текста в WPF? И да, через ~ 3 секунды изменение цвета задерживается. – ErikTJ

+0

Вы видите это на XP? Каковы возможности вашей видеокарты. –

ответ

0

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

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

1

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

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

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

Смежные вопросы