2011-11-28 111 views
0

我正在编写一个简单的实用程序来获取应用程序日志并将它们显示给用户。它需要从多个文件中取出日志条目并将它们合并到单个内部存储中。合并基于日志输入时间,因此多个条目可能具有相同的时间。请注意,日志的大小相当小,因此最大大小可能为10个文件,每个文件包含2,000个日志条目。快速插入和过滤的最佳数据结构

我也想把这个呈现给用户,但是允许他们根据不同的日志级别(调试,警告,错误等等)进行过滤,并根据它来自的文件进行过滤。这听起来像是一种非常常见的问题,所以其他人必须具备最佳方法的经验。我曾想到以下内容......

1,使用DataSet存储日志条目,然后使用DataView应用过滤,排序。

2,使用一对列表<>实例,一个主,然后是过滤到所需条目的副本,并将自定义IComparer函数应用于过滤列表以获得正确的排序。

想法?

+0

这是什么类型的应用程序,即您可以在初始加载+合并和每个过滤请求之间保持数据集/列表/附件多长时间? –

+0

这个想法是观察一个实时应用程序并监视它们生成时的日志。到数据集/列表将更新每秒几条记录,用户可以交互过滤。初始加载允许在应用程序启动时加载最近的消息。 –

+0

您是否已经解决了在其他应用程序正在写入文本文件时打开/监视文本文件的问题,以及是否只检测并只读取这些文本文件中的最新行?只是检查,同时考虑答案 –

回答

2

我假设数据足够小以适应内存,并且您宁愿没有数据库和外部文件的开销。

两者中的任何一个都应该很好地工作。我更喜欢List<T>,所以会更喜欢,但可以理解使用DataTable等的吸引力。

另一种选择是在您选择的任何内部数据存储上使用LINQ。这可能会简化查询。

我怀疑List<T>或任何你选择的收集将使用比DataTable更少的内存。但是,除非你的日志条目是巨大的,我不认为内存使用会成为一个问题。

+0

列表和Linq 2对象将是最容易的IMO,但如果你没有linq经验,就像Jim说Datatable会好的。 – BlackICE

1

我个人的做法是将日志导入到数据库中,然后使用标准数据库查询和数据绑定来过滤数据并将其呈现给用户。