C# C中除RichTextBox或解决方案以外的组件的建议#

C# C中除RichTextBox或解决方案以外的组件的建议#,c#,checkbox,richtextbox,C#,Checkbox,Richtextbox,我目前正在尝试制作一个日志查看器来分析日志。我正在读取日志文件,其中每行都有时间戳、日志类型和文本。由此,我创建了一个包含DateTime对象、类型和文本的对象 该类型分为6种类型: public enum LogType { DEBUG = 0, EVENT, ERROR, TEST_STEP, WARNING, SUCCESS } 其思想是每个日志级别旁边都有一个复选框,以便我可以快速添加或删除指定的日志级别。现在,对于具有不同日志级别的良好

我目前正在尝试制作一个日志查看器来分析日志。我正在读取日志文件,其中每行都有时间戳、日志类型和文本。由此,我创建了一个包含DateTime对象、类型和文本的对象

该类型分为6种类型:

public enum LogType
{
    DEBUG = 0,
    EVENT,
    ERROR,
    TEST_STEP,
    WARNING,
    SUCCESS
}
其思想是每个日志级别旁边都有一个复选框,以便我可以快速添加或删除指定的日志级别。现在,对于具有不同日志级别的良好分布的小日志文件来说,这很好。但是,当我有大量日志文件时,加载需要一些时间,而且每次复选框更改并逐行打印时,我都会迭代对象数组,这是非常无效的

是否有更好的方法将这些对象连接到每一行,或者有另一个更适合的组件,以便您可以轻松隐藏或显示日志级别

致意
Andreas

我所能推荐的就是使用WPF和
UI虚拟化
,这样你就不会给UI增加太多表示日志中一行的元素的负担,而对于过滤,则使用
并行化
来加快速度,让UI保持响应性。

因为你不需要实时更新,您可以读取整个文件,并将不同的类型存储在不同的类中,这些类继承自同一基类。例如,每种类型都有一个基类
Log
和一个派生类
DebugLog:Log
,等等。您只能在基类中定义和实现大多数字段,因为它只是存储一些数据,而无需修改

这些派生类按照日志级别的类型分别存储数据。通过这种方式,您可以通过清除列表并仅加载所需类中的数据来刷新UI,而无需再次迭代所有数据(当然取决于过滤器)


但是,您必须构建某种排序处理程序才能正确显示数据。

在查看日志文件时,日志文件是否会更改,即是否需要实时检查其他数据?不,它是一个“已关闭”的日志文件。我只需要有一个“过滤器”,它比每次单击复选框时重写整个文本要快。UI虚拟化肯定会有所帮助。不确定数据虚拟化是否有进一步帮助:。顺便说一句,为什么要使用RichTextBox?首先想到的是,尽管经过过滤,还是要再次编写文件。正如我所说的,如果有另一种类型更易于维护,我很乐意使用它,尽管我现在不知道该组件。