Есть ли потеря производительности при использовании запуска в приложении wpf? - PullRequest
0 голосов
/ 08 ноября 2019

Это сложная проблема для меня, и я пытался решить ее в течение нескольких дней.

Я делаю приложение WPF, которое запускает скрипт python для автоматического тестирования, и оно ловит выходные данные питона. скрипт, который первоначально отображается на консоли cmd, а вместо этого отображается в RichTextBox. Кроме того, я надеюсь, что выходные данные будут отображаться другим цветом в RichTextBox.

Чтобы достичь этих целей, я добавляю Parapraph в RichTextBox. Каждый раз, когда я получаю строку вывода, я создаю новый прогон (выход), устанавливаю цвет переднего плана прогона и добавляю его в Paragraph. Просто так:

SolidColorBrush INFOBrush = new SolidColorBrush(Color.FromRgb(25, 255, 36));
Paragraph p = new Paragraph();

void Init()
{
    richTextBox.Document.Blocks.Add(p)
}

void output_Receive(object sender, DataReceivedEventArgs e)
{
    Run r = new Run(e.Data);
    r.Foreground = INFOBrush;
    p.Inlines.Add(r);

    if(p.Inlines.Count > 100)
    {
        p.Inlines.Remove(p.Inlines.FirstInline);
    }
}

Чтобы предотвратить неограниченное увеличение прогонов вАбзац, я удаляю первый, когда количество запусков больше 100. Я думал, что использование памяти скоро будет стабильным. Тем не менее, он продолжает расти, и через 24 часа использование памяти достигает 1.2G.

Я перезапускаю проект и использую инструмент анализа в visual studio для его анализа. Ниже приведены новые объекты в моем коде.

Я запускаю три сценария Python, поэтому есть три richTextBox, шесть Paragraph и около 300 Run. Кажется, с этими парнями проблем нет. Но счет TextTreeTextNode растет как сумасшедший до 4000, и он еще не закончился.

Я прошу прощения за мой плохой английский, и я буду признателен, если кто-то поможет !!

a busy cat a busy cat a busy cat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...