在C中抓取递归ntfs目录的最快方法
发布时间:2020-12-16 03:47:01 所属栏目:百科 来源:网络整理
导读:我写了一个小的爬虫来扫描和求助目录结构. 它基于dirent(这是FindNextFileA的一个小包装) 在我的第一个基准测试中,这是令人惊讶的缓慢: 4500个文件大约123473ms(thinkpad t60p本地三星320 GB 2.5“HD). 在123473毫秒内找到121481个文件 这个速度正常吗? 这
我写了一个小的爬虫来扫描和求助目录结构.
它基于dirent(这是FindNextFileA的一个小包装) 4500个文件大约123473ms(thinkpad t60p本地三星320 GB 2.5“HD). 这是我的代码: int testPrintDir(std::string strDir,std::string strPattern="*",bool recurse=true){ struct dirent *ent; DIR *dir; dir = opendir (strDir.c_str()); int retVal = 0; if (dir != NULL) { while ((ent = readdir (dir)) != NULL) { if (strcmp(ent->d_name,".") !=0 && strcmp(ent->d_name,"..") !=0){ std::string strFullName = strDir +""+std::string(ent->d_name); std::string strType = "N/A"; bool isDir = (ent->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0; strType = (isDir)?"DIR":"FILE"; if ((!isDir)){ //printf ("%s <%s>n",strFullName.c_str(),strType.c_str());//ent->d_name); retVal++; } if (isDir && recurse){ retVal += testPrintDir(strFullName,strPattern,recurse); } } } closedir (dir); return retVal; } else { /* could not open directory */ perror ("DIR NOT FOUND!"); return -1; } } 解决方法
在某些情况下,这样的速度是正常的.首先,使用FindFirstFileA而不是FindFirstFileW将导致从UTF-16到ANSI的转换开销.其次,如果您要浏览操作系统尚未访问的目录,则会产生至少一次查找惩罚(大多数消费者硬盘大约需要16毫秒),将枚举限制在每秒100次以下的目录检查中.如果给定驱动器上的主文件表严重碎片,这将变得更糟.
关于文件数量,它将更多地取决于每个目录的文件数量而不是文件本身的数量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |