通过清除缓存的文件来模拟新的测试条件

时间:2014-07-14 21:10:39

标签: c# .net caching ram purge

对于POC,我已经编写了多种方法的测试方法来实现相同的结果。问题是当我运行第一个测试时,一些(.txt)文件被缓存。 RAM的使用量几乎与这些文件的大小相同,可见。合并文件的大小几乎是GB,从磁盘读取它们并非易事。这将使第二种方法比第一种方法具有不公平的优势。

在两次测试之前,如何在我的C#代码中以编程方式purge the RAM在Windows桌面上?从本质上讲,我需要下面代码段中FreeRAM()方法的代码(或一些提示):

public static void Main()
{
    FreeRAM(); // Need code for this method
    RunAndTimeTestOne();
    FreeRAM();
    RunAndTimeTestTwo();
    FreeRAM();
    RunAndTimeTestThree();
    .
    .
    .
}

此外,如果无法以编程方式执行此操作,我也很乐意了解这一点。

2 个答案:

答案 0 :(得分:1)

让我们先了解清除'清除'在Mac OS X上确实......

  

purge -- force disk cache to be purged (flushed and emptied)

     

吹扫可用于近似初始启动条件   磁盘缓冲区缓存用于性能分析。它不会影响   通过malloc,vm_allocate分配的匿名内存,   等

但是,Windows会缓存从磁盘读取并写入的文件数据 到磁盘。这意味着读操作从中读取文件数据 系统内存中的区域称为系统文件缓存,而不是来自 物理磁盘。相应地,写操作写文件数据 到系统文件缓存而不是磁盘,这种类型 缓存称为回写缓存。缓存是按管理进行的 文件对象。 因此,'何时将数据写回磁盘?'由缓存管理器决定。

缓存管理器如何工作?请阅读以下内容......

  

Caching occurs under the direction of the cache manager,哪个   在Windows运行时持续运行。文件中的数据   系统文件高速缓存以确定的间隔写入磁盘   操作系统以及该文件数据以前使用的内存   被释放 - 这被称为刷新缓存。的政策   延迟将数据写入文件并将其保存在文件中   缓存直到刷新缓存称为延迟写入,它就是   由高速缓存管理器以确定的时间间隔触发。该   刷新文件数据块的时间部分基于   它存储在缓存中的时间和数量   自上次在读取操作中访问数据以来的时间。这个   确保经常读取的文件数据可以保持可访问状态   系统文件缓存最长时间。

您可以更改缓存管理器的行为吗?是的你可以。 Here就是这样做的,这个页面也讲述了使用Windows'可以对你的RAM做的所有其他事情。缓存管理API。 但可能会导致意外行为。

  

如果系统没有经常刷新,那么可能性就是   更高的是系统内存将被缓存耗尽,或者a   突然的系统故障(例如电脑断电)会   在冲洗之前发生。在后一种情况下,缓存的数据将   迷路了。

希望您能够了解如何执行“清除”#39;在Windows中以及为什么它是一个永远不需要的操作。

答案 1 :(得分:0)

这真的没必要。 Win 7很好地管理了内存。

但是,如果这对你来说不够好,请看看 - http://www.tomshardware.com/forum/37230-63-free-memory