文件系统提升得非常慢?

时间:2012-12-16 00:12:52

标签: c++ boost

我目前正在学习Boost框架,我已经找到了如何列出我系统上的所有文件夹和文件, 使用

#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <iostream>
using namespace std;
int main()
{
    for ( boost::filesystem::recursive_directory_iterator end, dir("C:\\");
       dir != end; ++dir ) {
       cout << *dir << std::endl;
    }
    return 0;
}

但我遇到的唯一问题是这个过程有多慢......我做错了什么,或者只是微软的.NET版本列出所有文件要快得多? 谢谢!

3 个答案:

答案 0 :(得分:1)

您的问题意味着比较,但您只提供了一半的信息,即您要进行比较的代码在哪里?有许多方法可以提高您提供的代码的性能,其中一些已在上面的注释中提供。

也就是说,您首先观察性能差异的原因很可能可以追溯到C#代码运行的托管环境。您的文件系统很可能在.Net的内存空间中编入索引,而您的C ++代码和Boost库直接进入文件系统,而不是从微软试图提高.NET环境效率的方式中获益。如果没有效率,C#代码似乎更有可能比相同质量的编译C ++代码慢得多。

答案 1 :(得分:0)

还取决于文件夹中存在多少文件。如果有很多文件,那么确实需要花费很多时间。你试过一个包含很少文件的文件夹吗?

答案 2 :(得分:0)

.NET版本可能已编入索引,可能只需要从平面格式读取文件名。您的建议需要打开每个目录。