代码之家  ›  专栏  ›  技术社区  ›  Evgeny Lazin

Windows系统缓存和大型文件

  •  1
  • Evgeny Lazin  · 技术社区  · 16 年前

    我的windows系统缓存有问题。

    int main(int argc, char* argv[])
    {
        HANDLE file_ = INVALID_HANDLE_VALUE;
        file_ = CreateFile(
                                "test_file.txt",
                                GENERIC_WRITE, 
                                FILE_SHARE_READ, 
                                0, 
                                OPEN_ALWAYS, 
                                FILE_FLAG_SEQUENTIAL_SCAN, 
                                NULL
                                );
        if (file_ == INVALID_HANDLE_VALUE || file_ == NULL)
        {
            std::cout << "CreateFile error " << GetLastError() << std::endl;
            return GetLastError();
        }
        int counter = 0;
        DWORD io_bytes = 0;
        while(true)
        {
            char buffer[0x1000];
            int len = _snprintf_s(buffer, 0x1000, 0xffff, "test message %d\r\n", counter);
            counter++;
            if ( !WriteFile(file_, buffer, len, &io_bytes, NULL) )
            {
                std::cout << "WriteFile error " << GetLastError() << std::endl;
                return GetLastError();
            }
            if (counter > 10000000)
            {
                system("pause");
                return 0;
            }
        }
    }
    

    3 回复  |  直到 16 年前
        1
  •  3
  •   Aaron Digulla    16 年前

    Windows文件缓存将尝试在RAM中保留尽可能多的文件。在WindowsNT中,加载一个非常大的文件可能会触发一个bug。如果文件不适合缓存,它将永远不会被释放,迫使RAM中的其他所有内容进入交换文件,直到您的机器不断交换。

    但你的情况更简单。在查看器中打开文件将在缓存中加载文件。由于您仍在编写,缓存项将相应增长。现在退出查看器,但仍在写作。Windows应该做什么?显然,它将文件保存在缓存中。

        2
  •  0
  •   Evgeny Lazin    16 年前

    当我的系统内存不足时,缓存不会收缩,系统会将所有内容卸载到交换文件中。在写入过程中关闭文件时,系统缓存会收缩。

        3
  •  0
  •   Will Dean    16 年前

    如果我是你,我会尝试更好地了解任务管理器显示的“系统缓存”编号的组成。

    我怀疑这不是你所想的,你使用的“系统将所有内容卸载到交换文件”这样的短语尤其让我想知道你是否在尝试将不同系统上的体验移植到Windows上。