PerformanceProgressBar съедает 50% процессора, даже когда невидим - PullRequest
4 голосов
/ 02 сентября 2011

Я использую элемент управления PerformanceProgressBar из набора инструментов Silverlight для Windows Phone.Я наблюдаю, как только отображается страница с PerformanceProgressBar, процессор в эмуляторе переходит на 50% и остается там даже после того, как свойства IsIndedeterminate / Visibility / Enabled были отключены.

Кто-нибудь еще наблюдал это?

Не уверен, относится ли это только к эмулятору или к телефону.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 02 сентября 2011

При использовании PerformanceProgressbar вы должны не только изменить состояние видимости, но и соответственно изменить свойство IsIndeterminate. Если вы делаете полосу видимой, установите IsIndeterminate в значение true, если вы скрываете ее, установите IsIndeterminate в значение false. Это должно решить вашу проблему.

2 голосов
/ 02 сентября 2011

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

0 голосов
/ 02 сентября 2011

Любая Анимация на основе раскадровки (включая PerformanceProgressBar) должна обязательно работать плохо, так как выполняется в привилегированном потоке.Если вы хотите узнать больше или прочитать об альтернативах, посмотрите здесь .

. Для быстрой информации посмотрите таблицу в самом конце статьи.PerfProgressBar действительно отнимает ~ 50% ЦП, что заметно лучше, чем стандартный ProgressBar (> 60%), но намного хуже, чем другие возможности.

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

Тестовое приложение, описанное в статье, является частью примеров Resco Mobile Forms Toolkit.Это приложение использует этот код для PerformanceProgressBar:

<ProgressBar Style="{StaticResource PerformanceProgressBar}"
    Width="250" Margin="0" Padding="10"
    IsIndeterminate="{Binding ElementName=PerfProgressCheckBox, Path=IsChecked}"
    Visibility="{Binding ElementName=PerfProgressCheckBox, Path=IsChecked, Converter={StaticResource TrueVis}}" />

Я могу заверить вас, что PerfProgressBar не берет никакого ЦП, когда неактивен.Это относится как к устройству, так и к эмулятору.Я бы искал проблему в вашем коде.

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