使用MemoryMappedFile对大型文本文件执行搜索是否有意义?
本文关键字:搜索 是否 有意义 执行 文件 MemoryMappedFile 大型 文本 使用 | 更新日期: 2023-09-27 18:02:19
我的任务是实现一个搜索函数,该函数将搜索几个大(几个MB)的日志文件,并返回包含关键字的行。日志文件不断被添加到池中,因此每次搜索都必须是动态的。
为每个文件创建MemoryMappedFile,然后遍历每行,匹配关键字,这有意义吗?如果不是,那有什么更好的办法呢?
任何链接到示例代码将不胜感激。
是。"几MB"并不是很多,它可以轻松地放入2gb。
您需要使用接受映射大小的构造函数,因为文件将随时间增长。此外,我认为您需要在每个搜索上重新创建访问器或流,但我发现MSDN在这里有点不清楚。
对于Stream,创建StreamReader并读取每一行很简单。整个过程很可能在合理的硬件上受到I/O限制,所以一开始不要为CPU优化而烦恼。
为什么不直接在内存中创建一个结构合理的索引对象树,优化搜索?
编辑:在一些注释后添加…
可以是这样的:
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"];