【发布时间】:2012-12-19 19:10:53
【问题描述】:
我正在尝试优化对大型文本文件 (300-600mb) 中字符串的搜索。使用我目前的方法,耗时太长。
目前我一直在使用IndexOf 来搜索字符串,但是用字符串为每一行建立索引所花费的时间太长(20 秒)。
如何优化搜索速度?我试过Contains(),但这也很慢。有什么建议么?我在考虑正则表达式匹配,但我没有看到它有显着的速度提升。也许我的搜索逻辑有缺陷
例子
while ((line = myStream.ReadLine()) != null)
{
if (line.IndexOf(CompareString, StringComparison.OrdinalIgnoreCase) >= 0)
{
LineIndex.Add(CurrentPosition);
LinesCounted += 1;
}
}
【问题讨论】:
-
您到底在寻找什么?单词?
-
您的 CompareString 是什么。请举例说明您要查找的内容。
-
您确定这是您的搜索部分吗?不做任何检查只逐行读取文件需要多长时间?
-
在不知道文件内容是什么以及您在其中搜索什么的情况下,这很难回答。如果您在文本文档中搜索短语与在按字母顺序排列的单词列表中搜索单词,则会得到截然不同的结果。
-
对不起,让我指定我要搜索的内容。我正在查看一个大的日志文件,例如一行可以这样读取 61 - order for burger [9=1, 51=0, 59=1]。其中 9、51、59 是表示配料的哈希值(番茄酱 (9) = 是,蛋黄酱 (51) = 否,芥末(59) = 是。所以搜索可以是“订单”(显示所有订单)或“51 = 0'(显示所有未使用蛋黄酱的订单)。无需搜索,我可以在约 5 秒内逐行读取文件。但是通过搜索我实现的方式 - 它需要更长的时间。所以它绝对是我正在搜索的方式正在减慢它的速度
标签: c# search io full-text-search