c#搜索大文本文件

标签 c# search io full-text-search

我正在尝试优化对大型文本文件 (300-600mb) 中字符串的搜索。使用我当前的方法,花费的时间太长。

目前我一直在使用 IndexOf 来搜索字符串,但是它花费的时间太长(20 秒)来为字符串的每一行建立索引。

如何优化搜索速度?我试过 Contains() 但这也很慢。有什么建议么?我在考虑正则表达式匹配,但我没有看到它有显着的速度提升。可能是我的搜索逻辑有问题

例子

while ((line = myStream.ReadLine()) != null)
{
    if (line.IndexOf(CompareString, StringComparison.OrdinalIgnoreCase) >= 0)
    {
        LineIndex.Add(CurrentPosition);
        LinesCounted += 1;
    }
}

最佳答案

您使用的强力算法在 O(nm) 时间内执行,其中 n 是要搜索的字符串的长度,m 您要查找的子字符串/模式的长度。您需要使用字符串搜索算法:

但是,根据您要查找的内容,使用精心制作的正则表达式可能就足够了。参见 Jeffrey's Friedl的书,Mastering Regular Expressions寻求有关构建高效正则表达式(例如,无回溯)的帮助。

您可能还想查阅好的算法文本。我偏爱 Robert Sedgewick 的 Algorithms在其 various incarnations ([C|C++|Java] 中的算法)

关于c#搜索大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959429/

相关文章:

java - 从java中的重定向url获取数据给出403错误

c# - 淡化面板 - Windows 窗体

c# - _ 在函数和变量名中是什么意思?

c - 在 C 中搜索 .txt 文件中的字符串?

search - 如何使用批处理搜索和替换区分大小写的字符串

haskell - 惰性 I/O 有什么不好呢?

Java:使用不带可序列化的 ObjectOutputStream

c# - 为不可修改的类型实现类似 IConvertible 的功能

c# - 如何从文件中删除 xml 元素?

elasticsearch - 是否可以使用 Elasticsearch 搜索动态(网页)内容?