В этом посте мы увидим разницу в производительности между .NET Core и NodeJS, выполняющими последовательные внутренние циклы.
Я использовал для этого теста .NET Core 1.1 и NodeJS 6.9.4.
Конечно, время работы зависит от скорости вашей машины. Я использовал двухъядерный процессор AMD с тактовой частотой 2,20 ГГц.
Для теста найдем все положительные целые решения уравнения
где a, b, c и d — целые числа от 1 до n. Я выбрал n=150 для своего теста.
Есть три способа решить эту проблему, наиболее интересным для нашего теста является решение грубой силы, которое перебирает все возможные значения a, b, c и d, проверяя комбинацию, которая работает. Всего у нас получится четыре последовательных петли.
Это фрагменты алгоритма грубой силы в .net core и NodeJS соответственно:
В консоли получаем следующий результат:
NodeJS
.NET Core
Как мы видим, версия NodeJS занимает всего 17 секунд, а версия .NET — более 3 минут и 30 секунд при выполнении алгоритма грубой силы!
Никаких существенных различий, если мы решаем уравнение более эффективно, потому что у нас меньше внутренних циклов.
Решение equationOneValidD учитывает, что для каждого (a, b, c) у нас есть только одно допустимое значение d.
Другое решение, имеющее только два внутренних цикла, использует преимущества хеш-таблицы для вставки всех пар (c, d) и последующего использования ее напрямую, поскольку каждая (a, b) уже будет на карте.
Код, связанный с этим, доступен по адресу https://github.com/LuigiAndrea/Inner-Loop.