В этом посте мы увидим разницу в производительности между .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.