代码之家  ›  专栏  ›  技术社区  ›  Stephen Denne

清除文件缓存以重复性能测试

  •  97
  • Stephen Denne  · 技术社区  · 17 年前

    我可以使用什么工具或技术来删除缓存的文件内容,以防止性能结果出现偏差?我认为我需要完全清除或有选择地删除有关文件和目录内容的缓存信息。

    当我重复分析文件处理工作的不同策略时,我希望消除我在IO时间中看到的可变性。

    我主要对Windows XP的解决方案感兴趣,因为它是我的主要开发机器,但我也可以使用linux进行测试,因此我也对该环境的答案感兴趣。

    CacheSet ,但单击“清除”不会导致重新读取我刚读过几次的文件的时间显著增加(冷启动后恢复到计时)。

    8 回复  |  直到 13 年前
        1
  •  90
  •   Jeff Atwood    13 年前

    使用系统内部的 RAMMap app

    rammap empty standby

    空/空备用列表菜单选项将清除Windows文件缓存。

        2
  •  17
  •   user901295 user901295    14 年前

    对于Windows XP,您应该能够通过使用带有文件\标志\无\缓冲选项的CreateFile打开文件,然后关闭句柄来清除特定文件的缓存。这没有文档记录,我也不知道它是否适用于Windows的更高版本,但我很久以前在编写测试代码来比较文件压缩库时就使用了它。我不记得读或写访问是否影响了这个技巧。

        3
  •  14
  •   0xC0000022L    7 年前

    快速的谷歌搜索为Linux提供了这些选项

    1. sync && echo 1 > /proc/sys/vm/drop_caches
        4
  •  13
  •   Edwin van Mierlo    7 年前

    可以找到命令行实用程序 here

    来源:

    EmptyStandbyList.exe (上图)可以清空:

    • 处理工作集,

    用法:

    EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
    
        5
  •  4
  •   Prasad Jadhav Psi    13 年前
     #include <fcntl.h>
    
    int posix_fadvise(int fd, off_t offset, off_t len, int advice);
    

    带建议选项 POSIX_FADV_DONTNEED :

        6
  •  3
  •   Stephen Denne    17 年前

    我发现了一种似乎有效的技术(除了重新启动):

    1. 复印几份 MemAlloc
    2. 使用Process Explorer可以观察到系统缓存大小降低到非常低的级别

    但这不是选择性的。理想情况下,我希望能够清除用于缓存我希望不再缓存的文件的磁盘块的特定内存部分。

        7
  •  3
  •   robertcollier4    13 年前

    要更好地查看Windows XP文件系统缓存,请尝试 ATM by Tim Murgent -它允许您在更详细、更准确的视图中查看文件系统缓存工作集大小和备用列表大小。对于Windows XP-您需要旧版本1的ATM,可供下载 here 自从 V2 V3 需要Server 2003、Vista或更高版本。

    你会注意到,尽管 Sysinternals Cacheset 将减少“缓存WS-Min”-实际数据仍然以备用列表的形式存在,从那里可以使用它,直到它被其他内容替换。然后使用其他工具替换它,例如 MemAlloc flushmem by Chad Austin Windows Server 2003 Resource Kit Tools

        8
  •  0
  •   seeker    9 年前

    这个问题也是针对Linux提出的,这里有一个相关的答案 here

    命令行工具 vmtouch