对于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();
.
.
.
}
此外,如果无法以编程方式执行此操作,我也很乐意了解这一点。
答案 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