-1

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

在两个测试之前,如何在我的 C# 代码中以编程方式在 Windows 桌面上清除 RAM ?本质上,我需要以下代码段中的FreeRAM()方法的代码(或一些编写技巧):

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

此外,如果无法以编程方式执行此操作,我也很乐意学习。

4

2 回答 2

1

让我们首先了解 Mac OS X 上的“清除”究竟是做什么的......

purge -- 强制清除磁盘缓存(刷新和清空)

清除可用于使用冷磁盘缓冲区缓存近似初始引导条件,以进行性能分析。它不影响通过 malloc、vm_allocate 等分配的匿名内存。

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

缓存管理器如何工作?参见下文...

缓存发生在缓存管理器的指导下,它在 Windows 运行时连续运行。系统文件缓存中的文件数据以操作系统确定的时间间隔写入磁盘,并释放该文件数据先前使用的内存——这称为刷新缓存。延迟将数据写入文件并将其保存在缓存中直到缓存刷新的策略称为延迟写入,它由缓存管理器以确定的时间间隔触发。刷新文件数据块的时间部分取决于它已存储在缓存中的时间量以及自上次在读取操作中访问数据以来的时间量。这可确保经常读取的文件数据在系统文件缓存中保持可访问的最长时间。

你能改变你的缓存管理器的行为吗?是的你可以。以下是您的操作方法,此页面还介绍了可以使用 Windows 的缓存管理 API 对您的 RAM 执行的所有其他操作。但这可能会导致意外行为。

如果系统没有足够频繁地刷新,那么系统内存将被缓存耗尽的可能性更大,或者在刷新之前会发生突然的系统故障(例如计算机断电)。在后一种情况下,缓存的数据将丢失。

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

于 2014-07-14T21:54:19.307 回答
0

这真的是不必要的。Win 7 很好地管理内存。

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

于 2014-07-14T21:13:04.437 回答