2017-09-07 5 views
0

이 질문은 일종의 일반적인 질문이지만, 그럼에도 불구하고 어떻게 처리해야할지 모르겠습니다.성능 메트릭 수집 : 파일의 "웜"상태와 "콜드"상태 재설정

파일을 열고 두 가지 다른 방법을 사용하여 데이터를 추출하는 데 걸리는 시간에 대한 데이터를 수집하기위한 테스트를 작성 중입니다. 어떤 경우에는 그 차이가 꽤 극적 일 수 있고, 그것이 유효한 결과일지도 모르지만 잠재적 인 완화 요소를 제거하고 싶습니다. 특히 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# 답변이 가장 직접적으로 도움이 될 수 있지만이 질문은 반 개념적이므로 아무 것도 할 것입니다.

답변

0

Windows를 사용하는 경우 FILE_FLAG_NO_BUFFERING 플래그를 사용하여 파일을 열 수 있다고 생각합니다. 플래그에 대한 자세한 내용은 here이고 더 유용한 정보를 제공 할 수있는 관련 스택 오버플로 질문이 here입니다.