Я делаю некоторый бенчмаркинг, чтобы определить, могу ли я использовать WPF для нового продукта. Однако ранние результаты работы разочаровывают. Я сделал быстрое приложение, которое использует привязку данных, чтобы отображать кучу случайного текста внутри окна списка каждые 100 мс, и он потреблял ~ 15% CPU. Поэтому я сделал еще одно быстрое приложение, которое пропустило схему привязки данных/данных и ничего не делает, кроме обновления 10 текстовых блоков, которые находятся внутри ListBox каждые 100 мс (фактический продукт не будет требовать 100 мс обновлений, больше как максимум 500 мс, но это стресс-тест). Я все еще вижу ~ 5-10% использования ЦП. Почему это так высоко? Это из-за всех строк мусора?
Здесь 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 ГГц Core 2 Duo, 4 ГБ оперативной памяти, интегрированная графика Intel 4500 HD. И это на порядок больше, чем аппаратное обеспечение, которое мне нужно разработать для реального продукта.