为什么 1250 个字符串与 90k 个模式的匹配速度如此之慢?

为什么 1250 个字符串与 90k 个模式的匹配速度如此之慢?

我的字符串是文件路径,例如s/14/11/13/15/n7ce49B_235_25ed2d70.jpg;我的模式很简单,都像n7ce49B_.+.

GNU grep 2.6.3在下面奔跑Debian 6.0.10戴尔DL360G7服务器(我提到它只是为了让大家了解一下这台机器的性能)具有 15k HDD,并且此命令:time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file无法完成 - 服务器交换太糟糕了。 20k 个图案需要 3 个多小时。

这对我来说似乎不合理。

根据评论请求,有以下文件:文件路径 20k 图案

还可以通过以下方式测试和调整输入线和模式的数量:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)

答案1

您在旧版本的 GNU grep 中遇到了性能问题(错误#22357)已解决通过这个提交,在 2.28 中发布,但发生了变化引入了一些回归,因此您需要使用 GNU grep3.0 或更高版本。

相关内容