Повысить файловую систему невероятно медленно?
В настоящее время я изучаю структуру 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 перечисляет все файлы намного быстрее?
Спасибо!
Ответы
Ответ 1
В вашем вопросе подразумевается сравнение, но вы указали только половину информации, то есть где код, с которым вы делаете сравнение? Существует множество способов повысить производительность кода, который вы предоставили, некоторые из которых были представлены в комментариях выше.
Тем не менее, вероятно, причина, по которой вы наблюдаете разницу в производительности, в первую очередь, может быть связана с самой управляемой средой, поверх которой запускаются коды С#. Весьма вероятно, что ваша файловая система индексируется в .Net-пространстве памяти, в то время как ваш код на С++ и библиотека Boost идут непосредственно в файловую систему, а не благодаря тому, как Microsoft попыталась сделать среду .NET более эффективной. Без повышения эффективности, кажется более вероятным, что код С# будет порядком magnatude медленнее, чем скомпилированный код С++ того же качества.
Ответ 2
Это также зависит от количества файлов, присутствующих в папке. Если файлов много, тогда это занимает много времени. Вы пытались с папкой, содержащей очень мало файлов?
Ответ 3
Версия .NET может быть проиндексирована и, возможно, нужна только для чтения имен файлов из плоского формата. То, что вы предлагаете, должно открывать каждый отдельный каталог.