复制 100 万个小文件后内存使用率过高(Win10 x64)

复制 100 万个小文件后内存使用率过高(Win10 x64)

我编写了一个小型 C++ 程序,将一个 2.7KB 的 png 文件复制 100 万次。复制之前我的内存情况如下: 在此处输入图片描述

复制程序完成后的样子如下: 在此处输入图片描述

我等了几分钟,复制程序关闭后,也许内存使用量会下降,但只下降了500MB。

RamMap 显示的内容如下: 在此处输入图片描述

如果我再运行几次复制程序,那么 RAM 使用率就会更高,但不会超过这个点: 在此处输入图片描述

这是怎么回事?为什么复制程序退出后内存使用率这么高?

以下是复制程序代码:

//called with loopSize=1'000'000
void TestFileCopy(const string& sourcePath, const string& destFolder, int loopSize)
{
    int counter = 0;

    while (counter < loopSize)
    {
        std::ifstream source(sourcePath, std::ios::binary);
        if (source.fail())
            throw std::runtime_error("File not found: " + sourcePath);

        string destPath = destFolder + std::to_string(counter) + ".png";
        std::ofstream dest(destPath, std::ios::binary);
        dest << source.rdbuf();
        source.close();
        dest.close();

        if (source.fail())
            throw std::runtime_error("Error reading file: " + sourcePath);

        if (dest.fail())
            throw std::runtime_error("Error writing file: " + destPath);

        ++counter;
    } 
}

如果我删除创建的文件,那么内存使用量就会下降: 在此处输入图片描述

答案1

我认为这是因为文件被操作系统缓存了。一旦删除文件,缓存就不再需要了。内存可以恢复。

相关内容