【问题标题】:Windows cache usage increases for files creation program written in C用 C 编写的文件创建程序的 Windows 缓存使用量增加
【发布时间】:2014-06-15 07:18:04
【问题描述】:

我有一个小型测试程序,可以在数千个文件夹中创建数百万个文件(用于测试目的)。它是带有fopenfclose 调用的C 代码。

此代码在 Linux 上运行良好(RHELSUSE),但在 Windows 上,内存使用量随着要创建的文件数量的增加(接近一百万个文件)而增加。系统内存使用量增加 接近 8 GB(系统容量),并且程序变得非常慢(我假设是由于换入和换出页面)。

此时程序的内存需求保持不变,大约为几 MB(这是预期的)。我观察到内存中的缓存使用率随着程序的进展而迅速增加,并在程序的整个生命周期中不断增长。如何告诉 Windows 不要缓存这些文件或文件夹,甚至有可能吗?

【问题讨论】:

  • 能分享一下你的小测试程序吗?
  • 程序运行时,Windows 上的进程内存是否也会增加?
  • @steve 不,进程内存保持不变。我将尝试使用 Win 32 API。
  • 代码粘贴在“pastebin.com/nUfSVe82
  • 缓存您访问的数据是“正常的、预期的”行为,这是无害的。用于缓存的内存通常比未使用的内存要好,而且缓存通常不会以任何方式影响性能。如果系统需要更多内存,它只会丢弃最旧的缓存条目。操作系统将永远为了满足缓存而开始交换,这完全是愚蠢的——不会发生。

标签: c++ c windows


【解决方案1】:

只是猜测,但您可能只是用不需要再次使用的文件来丢弃/填充文件缓存。这会降低系统速度,因为它必须从磁盘读取文件。执行此操作时,磁盘也正在使用中。

您可以尝试使用带有文件标志 FILE_FLAG_NO_BUFFERING 的 Win32 API 和 CreateFile,这样它就不会缓存文件。

【讨论】:

  • 我在以下 [链接] (msdn.microsoft.com/en-us/library/windows/desktop/…) 中读到,使用此类文件需要对齐和访问要求。我不确定该程序是否可以在这些严格的规范下工作,我正在考虑使用“FILE_FLAG_WRITE_THROUGH”,因为它使用缓存但它立即写入磁盘。
  • 这可能会进一步减慢程序的速度。现在每次写入都必须等待物理硬盘磁头移动。一定要尝试,但不要期待奇迹。
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2021-04-23
  • 2016-04-07
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多