2

我的任务是实现一个搜索功能,该功能将搜索几个大型(几 MB)日志文件并返回包含关键字的行。日志文件不断添加到池中,因此每次搜索都必须是动态的。

为每个文件创建一个MemoryMappedFile然后遍历每一行,匹配关键字是否有意义?如果没有,有什么更好的方法来解决它?

任何指向示例代码的链接将不胜感激。

4

2 回答 2

1

为什么不在内存中创建一个结构合理的索引对象树,优化搜索?

编辑:在一些评论后添加...

可能是这样的:

class Index
{
    public Dictionary<string, List<SourceFile>> FilesThatContainThisWord {get; set;}
    ...
}


class SourceFile
{
    public string Path {get; set;}
    ...
}


// Code to look up a term
var filesThatContainMonday = myIndex.FilesThatContainThisWord["Monday"];
于 2011-07-18T14:07:16.623 回答
1

是的。“几 MB”并不是很多,它很容易放入 2 GB。

您将需要使用采用映射大小的构造函数,因为文件会随时间增长。另外,我认为您需要在每次搜索时重新创建访问器或流,但我发现 MSDN 在这里有点不清楚。

使用 Stream,创建 StreamReader 并读取每一行是微不足道的。整个过程很可能是 I/O 受限于合理的硬件,所以最初不要为 CPU 优化而烦恼。

于 2011-07-18T14:36:59.773 回答