处理c#中的流式日志,richtextbox太慢了

时间:2012-08-16 14:31:06

标签: c# wpf winforms richtextbox

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

1 个答案:

答案 0 :(得分:1)

您可以将所有行添加到List中,如下所示:

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);

并使用支持虚拟化的控件来显示LogLines。您也可以使用例如10个标签/文本块创建自己的标签,您可以根据滚动方式从列表中手动分配值。 如果你让列表无限增长,解决方案会吃掉内存。如果您需要大量日志,则应使用文件系统来保存数据并定期截断列表。