Подтвердить что ты не робот

Повысить файловую систему невероятно медленно?

В настоящее время я изучаю структуру 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.NET перечисляет все файлы намного быстрее? Спасибо!

4b9b3361

Ответ 1

В вашем вопросе подразумевается сравнение, но вы указали только половину информации, то есть где код, с которым вы делаете сравнение? Существует множество способов повысить производительность кода, который вы предоставили, некоторые из которых были представлены в комментариях выше.

Тем не менее, вероятно, причина, по которой вы наблюдаете разницу в производительности, в первую очередь, может быть связана с самой управляемой средой, поверх которой запускаются коды С#. Весьма вероятно, что ваша файловая система индексируется в .Net-пространстве памяти, в то время как ваш код на С++ и библиотека Boost идут непосредственно в файловую систему, а не благодаря тому, как Microsoft попыталась сделать среду .NET более эффективной. Без повышения эффективности, кажется более вероятным, что код С# будет порядком magnatude медленнее, чем скомпилированный код С++ того же качества.

Ответ 2

Это также зависит от количества файлов, присутствующих в папке. Если файлов много, тогда это занимает много времени. Вы пытались с папкой, содержащей очень мало файлов?

Ответ 3

Версия .NET может быть проиндексирована и, возможно, нужна только для чтения имен файлов из плоского формата. То, что вы предлагаете, должно открывать каждый отдельный каталог.