C++ 搜索硬盘中所有文件的最快方法是什么?

C++ 搜索硬盘中所有文件的最快方法是什么?,c++,c,windows,visual-c++,C++,C,Windows,Visual C++,我目前正在尝试搜索硬盘中的所有文件 我将在Windows7上搜索大量文档。这意味着使用大量的文件I/O 我想我应该使用多线程或异步I/O 你怎么看?如果你想得对,它可以很好地应用于工作管道:线程1使用目录列表来检索和获取目录列表。线程2使用目录列表并将附加目录发回线程1,同时将文件转发到线程3 同时,线程3有一个简单的任务:一次从文件中获取N页数据,并将它们转发给线程4,后者搜索内存中的匹配页 由于应用程序在很大程度上会受到IO的限制,因此您可以放心地在线程3上投入一些CPU来优化请求的并发性和

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

我将在Windows7上搜索大量文档。这意味着使用大量的文件I/O

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


你怎么看?

如果你想得对,它可以很好地应用于工作管道:线程1使用目录列表来检索和获取目录列表。线程2使用目录列表并将附加目录发回线程1,同时将文件转发到线程3

同时,线程3有一个简单的任务:一次从文件中获取N页数据,并将它们转发给线程4,后者搜索内存中的匹配页

由于应用程序在很大程度上会受到IO的限制,因此您可以放心地在线程3上投入一些CPU来优化请求的并发性和优先级,以尝试并确保最大限度地提高将新页面交付到线程4的速度,从而提高整个过程完成的速度


OTOH,您可能会发现切换到将以足够快的速度生成一个不太复杂的解决方案。

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