在c#,richtextbox中处理流日志速度太慢

在c#,richtextbox中处理流日志速度太慢,c#,wpf,winforms,richtextbox,C#,Wpf,Winforms,Richtextbox,我在c#winforms中有一个客户端应用程序,除其他任务外,它通过tcp套接字从另一个应用程序接收实时日志。如果我只是将日志文本添加到richtextbox,应用程序很快就会陷入困境。显然,用户无法以输入文本的速度读取文本,但我们必须能够停止和启动系统,以便我们可以通过日志进行查看。 有比richtextbox更好的选择吗?我想保留的能力,彩色文本和能力,滚动通过日志回来。WPF中的某些内容是否更有效?您可以将所有行添加到一个列表中,该列表如下所示: public class LogLine

我在c#winforms中有一个客户端应用程序,除其他任务外,它通过tcp套接字从另一个应用程序接收实时日志。如果我只是将日志文本添加到richtextbox,应用程序很快就会陷入困境。显然,用户无法以输入文本的速度读取文本,但我们必须能够停止和启动系统,以便我们可以通过日志进行查看。
有比richtextbox更好的选择吗?我想保留的能力,彩色文本和能力,滚动通过日志回来。WPF中的某些内容是否更有效?

您可以将所有行添加到一个列表中,该列表如下所示:

public class LogLine
{
    public string Message { get; set; }
    public Color Color { get; set; }
    public DateTime TimeStamp { get; set; }
}

 List<LogLine> _log = new List<LogLine>(5000);
公共类日志行
{
公共字符串消息{get;set;}
公共颜色{get;set;}
公共日期时间时间戳{get;set;}
}
列表_log=新列表(5000);
并使用支持虚拟化的控件来显示日志行。您也可以使用10个标签/文本块创建自己的标签/文本块,您可以根据滚动位置从列表中手动分配值。
如果让列表无限增长,解决方案将消耗内存。如果您需要大量日志,您应该使用文件系统来保存数据并定期截断列表。

您是否尝试过分析以确保富文本框确实是瓶颈?如果用户无法读取,为什么还要麻烦将其放在屏幕上?为什么不输出到日志文件?@DavidB我不希望用户必须加载单独的文件,这应该很快可用。有没有一种简单的方法可以使日志文件与控件关联,以便在控件更新时滚动该控件?很难相信c#做不到这一点,因为简单的shell可以很好地处理日志卷。@user511670如果您正在创建日志文件,您不需要用户选择任何内容。将日志转储到一个文件中,当用户想要查看它时,将其加载到您的文本框中。如果您的用户不想要并且无法阅读,那么实时更新是没有意义的。