这是 Windows 7,64 位,专业版使用
考虑一个非常简单的循环
for (i = 0; i < names->size(); i++)
{
std::string Name = names->at(i);
HANDLE fileHandle = CreateFile(Name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (fileHandle == INVALID_HANDLE_VALUE)
{
throw "Failed";
}
CloseHandle(fileHandle);
}
如果我在包含 863 个文件的目录上运行此命令,则需要略多于 22 秒的时间,即每个文件 25 毫秒。下次 169 毫秒或 0.19 毫秒/文件。如果我只在新目录上使用 find_file 时间非常快,大约 0.2 毫秒/文件。虽然我在这里使用了 CreateFile,但其他方法也会产生相同的结果。
答案当然是文件缓存:Windows必须缓存有关文件打开的信息。而且,必须是磁盘访问,就像目录在SSD上一样,第一次和第二次打开大致相同。
现在这些硬盘上的寻道时间只有 9 毫秒,所以有人知道当打开/关闭一个仅读取而不读取的文件需要 25 毫秒时 WINDOWS 正在做什么吗?但更重要的是,是否有可能加快这一速度。你可能会说25ms很快,但我是播放视频文件,所以需要33ms左右读取,而实际读取数据在30ms左右,所以打开的成本太高了。
关于如何开设的任何建议**快速加载文件将不胜感激。
Windows 做了一个lot当您打开文件时。我不是专家,但我可以提到文件系统维护(更新访问时间、日志记录等)和访问权限检查作为两个重要项目。不幸的是,我认为你不能让它更快。
当然,如果您不打算从文件中读取任何内容,而只是检查文件是否存在或读取一些元数据(例如修改时间),则有更快的方法可以在不打开文件的情况下执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)