我正在做一些基准测试以确定我是否可以将 WPF 用于新产品。然而,早期的业绩结果令人失望。我制作了一个快速应用程序,它使用数据绑定每 100 毫秒在列表框中显示一堆随机文本,它占用了大约 15% 的 CPU。所以我制作了另一个快速应用程序,它跳过了数据绑定/数据模板方案,除了每 100 毫秒更新一次 ListBox 内的 10 个 TextBlock 之外什么都不做(实际产品不需要 100 毫秒更新,更像是最大 500 毫秒,但是这是压力测试)。我仍然看到约 5-10% 的 CPU 使用率。为什么这么高?是因为所有的垃圾字符串吗?
这是不使用绑定的版本的 XAML:
<Grid>
<ListBox x:Name="numericsListBox">
<ListBox.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="48"/>
<Setter Property="Width" Value="300"/>
</Style>
</ListBox.Resources>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
</ListBox>
</Grid>
这是后面的代码:
public partial class Window1 : Window
{
private int _count = 0;
public Window1()
{
InitializeComponent();
}
private void OnLoad(object sender, RoutedEventArgs e)
{
var t = new DispatcherTimer(TimeSpan.FromSeconds(0.1), DispatcherPriority.Normal, UpdateNumerics, Dispatcher);
t.Start();
}
private void UpdateNumerics(object sender, EventArgs e)
{
++_count;
foreach (object textBlock in numericsListBox.Items)
{
var t = textBlock as TextBlock;
if (t != null)
t.Text = _count.ToString();
}
}
}
根据任务管理器,这会消耗约 5-10% 的 CPU,或高达其中一个内核的 20%!关于快速呈现文本的更好方法的任何想法?
我的电脑:XP SP3、2.26 GHz Core 2 Duo、4 GB RAM、Intel 4500 HD 集成显卡。这比我在实际产品中需要开发的硬件要强大一个数量级。