Это сложная проблема для меня, и я пытался решить ее в течение нескольких дней.
Я делаю приложение 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, и он еще не закончился.
Я прошу прощения за мой плохой английский, и я буду признателен, если кто-то поможет !!