이 질문은 일종의 일반적인 질문이지만, 그럼에도 불구하고 어떻게 처리해야할지 모르겠습니다.성능 메트릭 수집 : 파일의 "웜"상태와 "콜드"상태 재설정
파일을 열고 두 가지 다른 방법을 사용하여 데이터를 추출하는 데 걸리는 시간에 대한 데이터를 수집하기위한 테스트를 작성 중입니다. 어떤 경우에는 그 차이가 꽤 극적 일 수 있고, 그것이 유효한 결과일지도 모르지만 잠재적 인 완화 요소를 제거하고 싶습니다. 특히 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
}
당신은 내가, 다시 열고, 파일을 닫는 데이터를 받고, 파일을 여는군요 볼 수 있듯이 데이터를 다른 방식으로 저장하고 다시 닫습니다.
내 질문은 : 파일을 메모리에서 강제로 제거 할 수있는 방법이 있습니까? OS 캐싱에 영향을받지 않으려면 어떻게해야합니까? 나는 많은 파일 (> 4000)을 다루고 있으므로, 내가 생각할 수있는 유일한 방법은 한 가지 방법으로 모든 파일을 처리 한 다음 처음부터 다시 시작하고 다른 방법으로 다시 수행하는 것입니다. 그게 내가 돌아올 때까지 첫 번째 파일이 메모리에서 빠져 나올 가장 큰 기회를 제공한다.
또는 더 좋은 방법이 있습니까?
이것은 C# 관련 질문이 아니지만이 태그를 사용하기 때문에 C#으로 태그를 지정합니다. C# 답변이 가장 직접적으로 도움이 될 수 있지만이 질문은 반 개념적이므로 아무 것도 할 것입니다.