搜索硬盘中所有文件的最快方法是啥?

Posted

技术标签:

【中文标题】搜索硬盘中所有文件的最快方法是啥?【英文标题】:What is the fastest way to search all the files in hard disk?搜索硬盘中所有文件的最快方法是什么? 【发布时间】:2013-05-01 16:49:41 【问题描述】:

我目前正在尝试搜索硬盘中的所有文件。

我将在窗口 7 上搜索大量文档。这意味着使用大量文件 I/O...

我在想我应该使用多线程或异步 I/O。

你怎么看?

【问题讨论】:

完全取决于您要执行的搜索类型。你在寻找什么?一般来说,CPU 会比 I/O 快,所以一个线程就足够了,但这取决于您如何搜索以及 用于什么。跨度> 如果您的磁盘随机访问性能较差,重要的是要避免抖动(来回寻找)。通常每个物理磁盘(不是分区!)一个线程是理想的。 每个磁盘一个 reading 线程 - 您可以使用第二个线程进行实际搜索。 如果您只对文档感兴趣,请使用文档索引服务。 @YoungHyunYoo:如果索引服务已经为所有内容编制索引,您的搜索可以使用这些结果。如果没有,使用它的速度将与您可以发明的任何东西一样快。两者都将受到磁盘 I/O 的限制。 【参考方案1】:

如果您以正确的方式考虑它,这可以很好地适用于工作管道:线程 1 使用目录列表来检索和获取目录列表。线程 2 使用目录列表并将其他目录分派回线程 1,同时将文件转发到线程 3。

同时线程 3 有一个简单的工作:一次从文件中获取 N 页数据并将它们转发到线程 4,线程 4 在内存页中搜索匹配项。

由于应用程序主要受 IO 限制,您可以放心地在线程 3 中投入一些 CPU 以优化请求的并发性和优先级,以尝试确保最大限度地提高将新页面传递到线程的速度4 以及整个过程完成的速度。

OTOH,您可能会发现只需切换到 memory-mapped IO 就会产生一个不太复杂且速度足够快的解决方案。

【讨论】:

以上是关于搜索硬盘中所有文件的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 在地图中搜索所有具有相同值的键的最快方法是啥?

在python中记录实时数据的最快方法是啥,内存损失最少

搜索字谜的最快方法是啥?

Java中最快的子字符串搜索方法是啥

在 Xcode 7 中清除所有 XIB / Storyboard 文件中所有警告的最快方法是啥

睡眠 休眠 关闭硬盘 分别是啥意思?