2016-05-12 3 views
0

Я экспериментировал с DirectoryInfo.EnumerateFiles() и нашел этот странный шаблон производительности, который я не могу понять. Если я выполняю несколько последовательных перечислений, каждое последующее перечисление занимает больше времени, чем предыдущее, на значительное количество времени. Это странно. Но то, что даже странно, это то, что если я поместил несколько запросов в цикл for, то с каждой итерацией время поиска будет сброшено. Вот мой метод и мои результаты:Weird DirectoryInfo.EnumerateFiles() шаблон производительности?

static int i; 
    static void Main(string[] args) 
    { 
     for (int j = 0; j < 15; j++) 
     { 
      var sw = new System.Diagnostics.Stopwatch(); 

      i = 0; 
      sw.Start(); 
      EnumerateFiles(); 
      sw.Stop(); 
      Console.WriteLine(sw.Elapsed.ToString()); 

      i = 0; 
      sw.Start(); 
      EnumerateFiles(); 
      sw.Stop(); 
      Console.WriteLine(sw.Elapsed.ToString()); 

      i = 0; 
      sw.Start(); 
      EnumerateFiles(); 
      sw.Stop(); 
      Console.WriteLine(sw.Elapsed.ToString()); 

      i = 0; 
      sw.Start(); 
      EnumerateFiles(); 
      sw.Stop(); 
      Console.WriteLine(sw.Elapsed.ToString()); 


      Console.WriteLine("===================================="); 
     } 

     Console.ReadLine(); 
    } 

    private static void EnumerateFiles() 
    { 
     foreach (var item in new System.IO.DirectoryInfo("d:\\aac").EnumerateFiles("*.*", System.IO.SearchOption.AllDirectories)) 
     { 
      i++; 
     } 
    } 

И результаты:

Total files: 5386 

00:00:00.2868080 
00:00:00.5720745 
00:00:00.8443089 
00:00:01.1315225 
==================================== 
00:00:00.2729422 
00:00:00.5275304 
00:00:00.8259863 
00:00:01.0712183 
==================================== 
00:00:00.2457264 
00:00:00.4642581 
00:00:00.6948112 
00:00:00.9178203 
==================================== 
00:00:00.2198666 
00:00:00.4503493 
00:00:00.6717144 
00:00:00.8951899 
==================================== 
00:00:00.2391378 
00:00:00.4602923 
00:00:00.6767395 
00:00:00.9082248 
==================================== 
//last one (i == 15): 
00:00:00.2138526 
00:00:00.4437129 
00:00:00.6626495 
00:00:00.8794025 

Кто-нибудь знает, почему это происходит? Теперь ответ на вопрос о том, почему я выполняю четыре поиска на одной итерации, я: я пытался кое-что попробовать, измерил производительность и наткнулся на эту аномалию, и теперь я хочу знать, почему это так.

ответ

5

вместо всех sw.Start();

сделать sw = System.Diagnostics.Stopwatch.StartNew();

и попробуйте еще раз

вопрос здесь вы не сбросить секундомер, ваш задержавшись его

вы также можете позвонить в sw.Reset(); sw.Start(); или sw.Retart() вместо

+0

Да, я смущен Я не смотрел в e StopWatch вещь ... Спасибо! – user5080246

Смежные вопросы