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

本文关键字:解决方案 组件 RichTextBox 对于 | 更新日期: 2023-09-27 17:59:14

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

类型分为6种类型:

public enum LogType
{
    DEBUG = 0,
    EVENT,
    ERROR,
    TEST_STEP,
    WARNING,
    SUCCESS
}

这个想法是每个日志级别旁边都有一个复选框,这样我就可以快速添加或删除指定的日志级别。现在,对于具有良好分布的不同日志级别的小型日志文件来说,这很好。但是,当我有巨大的日志文件时,加载需要一些时间,而且每次复选框更改并逐行打印时,我都会迭代对象数组,这是非常无效的。

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

致以最诚挚的问候Andreas

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

我所能推荐的就是使用WPF和UI virtualization,这样就不会给UI带来大量表示日志中一行的元素的负担,而对于过滤,则使用parlallelization来加快速度并使UI保持响应。

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

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

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