【发布时间】:2018-02-16 17:11:51
【问题描述】:
我知道这是一个笼统的问题,但我不知道如何处理它。
我正在编写一些测试来收集有关打开文件需要多长时间的数据,并使用两种不同的方法从中提取一些数据。我注意到在某些情况下,差异可能非常大,这可能是有效的结果,但我想消除潜在的缓解因素。特别是,我担心在 Windows 上打开“暖”文件与“冷”文件。
我这里的基本流程(伪ish代码)如下:
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
}
如您所见,我正在打开一个文件,获取数据,关闭文件,再次打开它,以不同的方式获取数据,然后再次关闭它。
我的问题是:有没有办法强制文件超出内存,所以我不会受到任何类型的操作系统缓存的影响?我正在处理很多文件(> 4000),所以我唯一能想到的就是用一种方法处理所有文件,然后从头开始,然后用另一种方法再做一次。这给了我最大的机会在我回到那个时候让第一个文件超出内存。
或者有没有更好的方法来处理这个问题?
这可能不是特定于 C# 的问题,但无论如何我都会将其标记为 C#,因为这就是我用来完成所有这些工作的内容。 C# 的答案将是最直接的帮助,但由于这个问题是半概念性的,任何事情都可以,真的。
【问题讨论】:
标签: c# file operating-system performance-testing