Я провел очень простой тест производительности в клиентском приложении WPF:
public partial class MainWindow : Window
{
private ObservableCollection<int> data = new ObservableCollection<int>();
public ObservableCollection<int> DataObj { get { return data; } }
private void button1_Click(object sender, RoutedEventArgs e)
{
for (int j = 0; j < 5; j++)
{
Thread t = new Thread(() =>
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(5);
Dispatcher.Invoke(new Action(() => { data.Add(1); })); //updates the count
Dispatcher.Invoke(new Action(() => { richTextBox1.AppendText("1"); })); //updates the string data
}
});
t.Start();
}
}
Тогда у меня есть два элемента управления в пользовательском интерфейсе: a TextBlock
и a RichTextBox
.
TextBlock
привязан к свойству Count
источника данных, а RichTextBox
добавляет каждое новое значение данных в свою текстовую строку (т.е. отображает содержимое данных).
Если я отключу привязку RichTextBox
, TextBlock
обновляется очень быстро, циклически переходя по счету. Однако включение привязки RichTextBox
замедляет все, оба элемента управления обновляются в "глобусах", возможно, один или два раза в секунду. В других словах весь пользовательский интерфейс работает в темпе привязки RichTextBox
.
Есть ли способ нарушить эту зависимость производительности? Я понимаю, что RichTextBox может быть медленным, но почему он должен замедлять ускоряющий быстрый TextBlock?