Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从一个目录中读取许多小文件有多大问题?_C++_Linux_Windows - Fatal编程技术网

C++ 从一个目录中读取许多小文件有多大问题?

C++ 从一个目录中读取许多小文件有多大问题?,c++,linux,windows,C++,Linux,Windows,我必须阅读许多(多达5百万)小(9 KB)文件。目前它们都在一个目录中。我担心这将需要二次时间,甚至n^2 log n进行查找,对吗?这是否很重要(查找会比实际读取花费更多的时间)?当文件被操作系统缓存时,运行时间的渐近行为是否存在差异 我使用C++流来读取文件。目前我正在使用Windows 7和NTFS,但稍后我将在linux群集上运行该程序(不确定是哪个文件系统)。可能没那么糟糕:如果您枚举文件,并在遇到每个文件名时对其进行处理,那么您的操作系统很可能在其磁盘缓存中有目录项。出于实际目的,磁

我必须阅读许多(多达5百万)小(9 KB)文件。目前它们都在一个目录中。我担心这将需要二次时间,甚至n^2 log n进行查找,对吗?这是否很重要(查找会比实际读取花费更多的时间)?当文件被操作系统缓存时,运行时间的渐近行为是否存在差异


我使用C++流来读取文件。目前我正在使用Windows 7和NTFS,但稍后我将在linux群集上运行该程序(不确定是哪个文件系统)。

可能没那么糟糕:如果您枚举文件,并在遇到每个文件名时对其进行处理,那么您的操作系统很可能在其磁盘缓存中有目录项。出于实际目的,磁盘缓存是O(1)


会杀死你的是一个机械硬盘。您将有500万次磁盘搜索,每一次都需要约1/100秒的时间。那是5万秒,超过半天。这是一项需要SSD完成的任务。

使用内存映射I/O。根据我的测试,这是您可以提高的最大一个文件I/O性能。您可以更改一个目录的限制吗?您可以在此处找到一些有用的信息: