14

我目前正在学习 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版本要快得多?谢谢!

4

3 回答 3

1

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

也就是说,您首先观察到性能差异的原因很可能可以追溯到运行 C# 代码的非常托管的环境。您的文件系统很可能在 .Net 的内存空间中被索引,而您的 C++ 代码和 Boost 库直接进入文件系统,并且没有受益于 Microsoft 试图使 .NET 环境更高效的方法之一。如果没有效率,C# 代码似乎更有可能比相同质量的已编译 C++ 代码慢几个数量级。

于 2013-04-04T18:08:52.333 回答
0

它还取决于文件夹中有多少文件。如果有很多文件,那么确实需要很多时间。您是否尝试使用包含很少文件的文件夹?

于 2013-03-11T00:15:14.157 回答
0

.NET 版本可能会被索引,并且可能只需要从平面格式读取文件名。您建议的内容需要打开每个目录。

于 2013-03-25T12:30:01.753 回答