Exibindo o fluxo de rich text com o WPF

Tenho um aplicativo WPF que se conecta por meio de um soquete a um dispositivo e obtém dados de texto em fluxo contínuo (aproximadamente 1 mensagem por segundo). Esses dados são exibidos na interface do usuário. O usuário pode criar regras como "Se os dados contiverem 'abc', realce a linha" ou "... seja ousado", para que a saída de texto sem formatação não funcione, ela precisa ser um texto "rico"

Minha solução atual para isso é ter um FlowDocument no meu ViewModel que contém a saída formatada. A vista tem um FlowDocumentScrollViewer que está vinculado ao FlowDocument no ViewModel.

Isso funciona, mas quando o FlowDocument fica grande (~ 6.000 linhas), o desempenho começa a diminuir. O algoritmo atual limita o número de linhas em 10.000, mas as coisas pioram ainda mais, a ponto de o aplicativo não poder ser usado. Quando atingir 10.000 linhas, removo uma linha para cada linha adicionada, resultando no FlowDocumentScrollViewer recebendo 2 notificações de atualização para cada nova linha.

Tentei encontrar uma maneira de excluir em lote (quando atingimos 10.000 linhas, exclua as 1.000 linhas mais antigas), mas não há exclusão em massa no FlowDocument. Fazer um loop 1.000 vezes e a exclusão resulta em 1.000 notificações de atualização e bloqueia a interface do usuário.

Esse é o meu problema, aqui está a minha pergunta:

Qual é a melhor maneira de exibir streaming de conteúdo rich text com WPF? Recebo ~ 1 mensagem por segundo, cada mensagem tem ~ 150 caracteres e desejo manter as últimas 10000 mensagens. Estou fazendo isso da maneira errada? Existem outros controles / objetos com melhor desempenho?

EDITA: Aqui estão mais alguns requisitos

Precisa poder imprimir o texto de saídaPrecisa poder selecionar e copiar o texto de saída para que possa ser colado em outro documento

questionAnswers(3)

yourAnswerToTheQuestion