即使不可见,Performance Progress Bar也会占用50%的CPU

时间:2011-09-02 05:14:46

标签: windows-phone-7

我正在使用Silverlight Toolkit for Windows Phone中的PerformanceProgressBar控件。 我观察到,一旦显示了带有PerformanceProgressBar的页面,模拟器中的CPU就会达到50%并且即使在禁用了IsIndedeterminate / Visibility / Enabled属性之后也会保持不变。

还有其他人观察过这个吗?

不确定这是仅仅是模拟器行为,还是在手机上也是如此。

提前致谢。

3 个答案:

答案 0 :(得分:3)

使用PerformanceProgressbar时,您不仅应更改可见性状态,还应相应地更改IsIndeterminate属性。如果使栏可见,则将IsIndeterminate设置为true,如果隐藏它,请将IsIndeterminate设置为false。这应该可以解决你的问题。

答案 1 :(得分:2)

您如何测量仿真器CPU?您是在运行仿真器时测量PC CPU吗?如果是这样,这不是衡量真实性能的可靠指标。衡量应用程序性能的更好方法是启用frame rate counters。具体看一下渲染(或合成器)线程和UI线程帧速率。性能进度条不应该对UI线程帧速率产生影响,因为它的设计使它可以通过渲染/合成器线程进行更新。

答案 2 :(得分:-1)

任何基于Storyboard的动画(PerformanceProgressBar incl。)必须在特权线程上运行时表现不佳。如果您想了解更多信息或阅读替代方案,请查看here

有关快速信息,请查看本文末尾的表格。 PerfProgressBar实际上占用了大约50%的CPU,这明显优于标准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在非活动状态下不占用任何CPU。这在设备和仿真器上都适用。我会在你的代码中寻找一个问题。