文件系统:复制功能的速度秘诀是什么
What is the secret to the speed of the filesystem::copy function?
我正在努力达到filesystem::copy
读取文件内容并将该内容写入新文件的速度"复制操作";但我达不到那个速度。
以下是我尝试的一个简单示例:
void Copy(const wstring &fromPath, const wstring &toPath) {
ifstream readFile(fromPath.c_str(), ios_base::binary|ios_base::ate);
char* fileContent = NULL;
if (!readFile) { cout << "Cannot open the file.n"; return; }
ofstream writeFile(toPath.c_str(), ios_base::binary);
streampos size = readFile.tellg();
readFile.seekg(0, ios_base::beg);
fileContent = new char[size];
readFile.read(fileContent, size);
writeFile.write(fileContent, size);
readFile.close();
writeFile.close();
delete[] fileContent;
}
以前的代码可以复制一个文件。因此它的大小";1.48GB";介于";8至9〃;而filesystem::copy
能够在"秒"之间复制相同的文件;1至2";最长为秒
注意:我不想在本期使用C++17。
如何使函数的速度像filesystem::copy
您的实现需要分配整个文件大小的缓冲区。这是浪费,你可以只读取64k,写入64k,重复下一个块。
分页内存是有成本的。如果你读了整件事,然后写了整件事情,你最终会对整个文件进行两次分页。
可能是多个线程可能分别进行读/写(前提是读保持在前(。这可能会加快速度。
有了硬件支持,甚至可能不需要数据一直传输到CPU。然而,您的实现可能最终会这样做。编译器很难推理您对fileContent做了什么或不做了什么。
filesystem::copy
的实现可能会使用无数其他技巧。你可以去看看它是如何编码的,有很多开放的实现。
但有一点需要注意:标准库的实现可能依赖于语言无法保证的特定行为。因此,您不能简单地将代码复制到不同的编译器/体系结构/平台。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 在不减慢主应用程序速度的情况下在后端运行成员函数的技巧是什么
- Qt - 写入速度 - 在 Qt 中写入文件的最快方法是什么?
- 是什么减慢了对键对的排序速度