【发布时间】:2009-07-07 22:03:49
【问题描述】:
我正在一个包含数千个文件的大型目录树中搜索数千个字符串。每个字符串可以出现在许多不同的文件中。在 c# 中执行此搜索的最高效方式是什么?我尝试从 findstr 开始 proccessinfo (但它非常慢,因为它会打开每个文件数千次)。有什么建议吗?
【问题讨论】:
-
哪个操作系统?也许使用索引服务或 Windows 搜索?
-
文件如何存储在树中?它们是实际的 File 对象还是以纯文本形式存储? (...或秘密选项编号 3?):-)
-
我正在一个非常大的代码库中搜索资源键。因此文件类型各不相同,但可以使用 StreamReader 读取。现在我正在使用 Directory.GetFiles 来收集文件。现在我使用正则表达式库将密钥与包含每个文件内容的字符串匹配。我在 Window Server 2008 上运行。
-
您是否有理由必须使用 C# 执行此操作?为什么不直接使用 findstr?毕竟,您可以告诉它针对整个目录树执行。
-
我使用的是 findstr。但是因为我对每个字符串的出现位置感兴趣,所以我必须对每个文件执行数千次 find str ,每个字符串大约需要 30 秒(这很快就会加起来)。我想通过只打开每个文件一次来减少执行时间。现在每个文件大约需要 1 秒。