我正在做一些基准测试,以确定我是否可以将WPF用于新产品。但是,早期绩效结果令人失望。我做了一个快速的应用程序,它使用数据绑定来每隔100毫秒在列表框中显示一堆随机文本,并且它占用了大约15%的CPU。所以我做了另一个快速的应用程序,它跳过了数据绑定/数据模板方案,并且每隔100 ms更新一个ListBox内的10个TextBlocks(实际产品不需要100 ms更新,更像500 ms,但最多不过这是一个压力测试)。我仍然看到〜5-10%的CPU使用率。为什么这么高?是因为所有的垃圾串?这是慢的WPF TextBlock性能预计?
下面是不使用绑定版本的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集成显卡。这比我在真实产品中需要开发的硬件要强大一个数量级。
在WPF绑定不完全是你的方式。 – 2010-03-17 19:22:17
我没有发布使用绑定版本的代码(以及MVVM模式)。我认为这个版本的重量会更轻,这是一个更好的例子。 – 2010-03-17 19:28:08
绝大多数CPU周期都应该在渲染时刻烧录。但是请使用探查器来确保。下面是你的*非常* poky图形硬件的回顾:http://pcgamingcorner.com/wordpress/?p=820 – 2010-03-17 19:42:23