Я реализовал два метода, которые делают одно и то же: чтение json файлов, итерация по строкам и создание объектов. У меня нет проблем с производительностью, но просто из любопытства я измерил время, необходимое для выполнения каждого метода, следующим образом:
var sw = new Stopwatch();
sw.Start();
var res1 = Method1();
sw.Stop();
Console.WriteLine("method 1: " + sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
var res2 = Method2();
sw.Stop();
Console.WriteLine("method 2: " + sw.ElapsedMilliseconds);
Первый метод выполняется примерно за 70 мс, а второй примерно за 10 мс. Оба метода читают одни и те же файлы, но первый использует массивы для обработки, а второй - списки.
Вопрос
Дело в том, что когда я инвертирую порядок вызовов то время, необходимое для запуска каждого метода, становится равным 70 мс для второго метода (выполняется первым) и 10 мс для первого метода (выполняется вторым). Таким образом, реализации эквивалентны, и кажется, что важен именно порядок вызовов, поскольку нет общих объектов, потоков, асинхронной c или параллельной обработки.
Почему это так?