收集绩效指标:重置"温暖" vs."感冒"在档案上陈述

时间:2017-09-07 21:18:27

标签: c# file operating-system performance-testing

我知道这是一个普遍的问题,但我不知道如何处理它。

我正在编写一些测试来收集有关打开文件并使用两种不同方法从中提取数据所需时间的数据。我注意到在某些情况下,差异可能非常显着,这可能是有效的结果,但我想消除潜在的缓解因素。特别是,我担心温暖" vs."冷"文件在Windows上打开。

我的基本过程(伪代码)如下:

private void GatherMetrics(List<FileInfo> files)
{
    // Each metric holds how much data was gathered and how long it took
    var results = new List<MetricsResult>();

    for (int i = 0; i < files.Count; i++)
    {
        results.Add(GetAllData(files[i]));
        results.Add(GetDataSubset(files[i]));
    }

    // This just generates statistics on the data and outputs it somewhere.  Not
    // really relevant, since by then the data is already gathered.
    LogResults(results);
}

private MetricsResult GetAllData(FileInfo file)
{
    var stopwatch = new Stopwatch();
    stopwatch.Start();

    // Open file
    // Get the data from the file
    // Close file

    stopwatch.Stop();

    return new MetricsResult 
    { 
        Time = stopwatch.ElapsedMilliseconds,
        Data = /* data gathered from the file */
    }
}

private MetricsResult GetAllData(FileInfo file)
{
    // Same as GetAllData, only gathers data in a different way
}

正如您所看到的,我打开文件,获取数据,关闭文件,再次打开文件,以不同方式获取数据,然后再次关闭数据。

我的问题是:有没有办法强制文件内存不足,所以我不会受到任何类型的操作系统缓存的影响?我处理了很多文件(&gt; 4000),所以我唯一能想到的是用一种方法处理所有文件,然后从头开始重新使用另一种方法再做一次。这让我有机会让第一个文件在我回到原点时传出内存。

或者有更好的方法来解决这个问题吗?

这可能不是C#特定的问题,但我会将其标记为C#,因为这是我用来完成所有这些操作的原因。 C#答案最直接有用,但由于这个问题是半概念性的,所以任何事都可以,真的。

1 个答案:

答案 0 :(得分:0)

我相信如果您使用的是Windows,则可以使用FILE_FLAG_NO_BUFFERING标志打开该文件。有关该标志的更多信息可以在here找到,并且有一个相关的堆栈溢出问题here可能会提供一些更有用的信息