코드는 안봤지만, 대략적으로 문제점으로 볼 수 있는 것은 2가지 정도로 보이네요.
문제 1. 많은 양의 문자열 → 많은 양의 문자열을 출력하고 있다는 건 메모리가 점점 늘어난 다는 것이죠. 이 데이터를 실시간으로만 보는 용도면 한 번씩 비워주고, 그게 아니면 어느 정도 쌓였을 때 DB나 로컬로 내보내서 문자열을 적당히 비워줍시다.
문제 2. 잦은 출력 → 출력은 많은 컴퓨터 리소스를 요구합니다. 데이터가 1000글자를 10번출력하는 것보다 1000글자를 10번 축적했다가 한 번에 출력하는게 더 좋습니다. 시간의 텀을 줘서 한 번씩 출력하게 하는건 어떠신지요?
MVVM 패턴을 지키면서 대량의 데이터를 처리하는 것은 ReactiveUI의 주요 목적입니다.
도구를 배울 의지가 있으시다면 배워보시는 것도 좋을 거 같습니다.
만약 사용하지 않는다면, MVVM에서 MultiThread시 문제가 되는 부분은 사실 MultiThread 인 것 보다는 Dispatcher 처리를 어디서 하냐의 문제일 것 같습니다. 저는 개인적으로 대량의 데이터를 다루는 아키텍쳐에서는 queue 말고는 잘 안 떠오르네요.
이 문제는 메모리 문제도 있겠지만 Textbox를 사용한 것에도 문제가 있습니다.
원래 TextBox.append는 속도가 느리며 라인이 많아지면 더욱 느려집니다.
게다가 넣을 수 있는 텍스트 양에도 한계가 있을 겁니다.
따라서 하나의 TextBox에 Text를 계속 추가하는 것으로는 해결이 될 수 없을 겁니다.
차라리 로그 한 줄 또는 로그 그룹을 TextBlock에 표시하고 StackPanel을 Virtualization하는 형태로 하던지, 또는 이런 기능을 제공하는 C++로 개발되어 있는 서드파티 ActiveX TextBox 컴포넌트를 사용하는 것이 나을 것 같네요. 근데 .NET Core WPF에서는 COM 컴포넌는 사용할 수 없을 것 같네요.
또 다른 방법으로는 하나의 TextBox에 일정 라인수가 넘어가면 (예를 들면 1000라인) TextBox를 지우고 새로 Append를 하는 방법이 있습니다. 제가 개발했던 프로그램에서 화면 로그 표시를 위해서 로그 파일에는 모두 기록하고 화면에는 500라인이 넘어가면 TextBox를 지우고 새로 append를 하게 했었네요.
이 것도 안된다면 WPF에서 Console Window를 연 후 거기에 console.writeline으로 로그를 기록할 수도 있을 겁니다. 다만 .NET Framework에서는 되는데 .NET Core WPF 에서도 되는지는 모르겠습니다.
그리고, 어차피 UI 업데이트는 UI 스레드에서밖에 안되기 때문에 멀티 스레드로 UI 업데이트를 할 수는 없습니다. 게다가 대량의 로그를 화면에 표시하는 것은 MVVM과 맞지 않습니다.