Повышение производительности WPF за счет разделения пользовательского интерфейса на «регионы» - это возможно?

Я провел очень простой тест производительности в клиентском приложении 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();
        }
    } 

Затем у меня есть два элемента управления в пользовательском интерфейсе: TextBlock и RichTextBox .

TextBlock привязан к свойству Count источника данных, в то время как RichTextBox добавляет каждое новое значение данных в свою текстовую строку (т. Е. Отображает содержание данных).

Если я отключу привязку RichTextBox , TextBlock обновляется очень быстро, циклически меняя счетчик. Однако включение привязки RichTextBox замедляет все , оба элемента управления обновляются в «глобусах», возможно, один или два раза в секунду. Другими словами, весь пользовательский интерфейс работает в темпе привязки RichTextBox .

Есть ли способ избавиться от этой зависимости производительности? Я понимаю, что RichTextBox вполне может быть медленным, но почему он должен замедлять быстрый TextBlock, который в противном случае был бы быстрым?

10
задан flesh 9 April 2011 в 15:36
поделиться